
データが重複しないSQL文の書き方を教えてください。
下記のような2つのテーブルがあり、「管理番号」でOnして「使用数」をJoinさせ、かつ重複しないようにSQLを作成したいのですが、MySQLで可能でしょうか?
※0002に関しては、テーブル2の方がデータ数が多いため、Join後は2行になって「使用数」は重複せず、「数」の部分には0が入ればベストです
【テーブル1】
日付 品番 管理番号 数
2012/6/12A987 0001500
2012/6/14A987 0001300
2012/6/16A987 0001400
2012/6/18A987 0001800
2012/6/12A987 0002750
2012/6/12A987 0003540
2012/6/14A987 0003740
2012/6/16A987 0003840
2012/6/18A987 0003240
2012/6/20A987 0003640
【テーブル2】
日付 品番 管理番号 使用数
2012/7/10A987 0001160
2012/7/11A987 0001260
2012/7/10A987 0002220
2012/7/12A987 0002320
2012/7/20A987 0003530
2012/7/22A987 0003430
2012/7/24A987 0003830
【テーブルJoin】
日付 品番 管理番号 数 使用数
2012/6/12A987 0001500160
2012/6/14A987 0001300260
2012/6/16A987 00014000
2012/6/18A987 00018000
2012/6/12A987 0002750220
2012/6/12A987 00020320
2012/6/12A987 0003540530
2012/6/14A987 0003740430
2012/6/16A987 0003840830
2012/6/18A987 00032400
2012/6/20A987 00036400
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
SQLの基本がたぶんわかってないんだろうなぁ・・・という結合です
>※0002に関しては、テーブル2の方がデータ数が多いため
の箇所はロジックが破綻しているので、表示できるとしても「NULL」です
無理すれば一発でできないことはないですが、テンポラリを作りながらやると解りやすいかも。
//準備
create table テーブル1(日付 date,品番 varchar(10),管理番号 varchar(10),数 int,unique key (日付,管理番号,品番));
insert into テーブル1 values('2012-06-12','A987','0001',500),('2012-06-14','A987','0001',300),('2012-06-16','A987','0001',400),('2012-06-18','A987','0001',800),('2012-06-12','A987','0002',750),('2012-06-12','A987','0003',540),('2012-06-14','A987','0003',740),('2012-06-16','A987','0003',840),('2012-06-18','A987','0003',240),('2012-06-20','A987','0003',640);
create table テーブル2(日付 date,品番 varchar(10),管理番号 varchar(10),使用数 int,unique key (日付,管理番号,品番));
insert into テーブル2 values('2012-7-10','A987','0001',160),('2012-7-11','A987','0001',260),('2012-7-10','A987','0002',220),('2012-7-12','A987','0002',320),('2012-7-20','A987','0003',530),('2012-7-22','A987','0003',430),('2012-7-24','A987','0003',830);
//抽出SQL
create temporary table temp_t1
select (select count(*) +1 from テーブル1 AS t1b where t1a.日付 > t1b.日付 and t1a.管理番号=t1b.管理番号 and t1a.品番=t1b.品番) AS RANK,日付,品番,管理番号,数
FROM テーブル1 AS t1a;
create temporary table temp_t2
select (select count(*) +1 from テーブル2 AS t2b where t2a.日付 > t2b.日付 and t2a.管理番号=t2b.管理番号 and t2a.品番=t2b.品番) AS RANK,日付,品番,管理番号,使用数
FROM テーブル2 AS t2a;
create temporary table temp_t3
select RANK,管理番号,品番 from temp_t1 union select RANK,管理番号,品番 from temp_t2;
//表示部分
select temp_t1.日付
,temp_t3.品番
,temp_t3.管理番号
,coalesce(数,0) as 数
,coalesce(使用数,0) as 使用数
from temp_t3
left join temp_t1 on temp_t3.RANK=temp_t1.RANK and temp_t3.管理番号=temp_t1.管理番号 and temp_t3.品番=temp_t1.品番
left join temp_t2 on temp_t3.RANK=temp_t2.RANK and temp_t3.管理番号=temp_t2.管理番号 and temp_t3.品番=temp_t2.品番
order by temp_t3.管理番号,temp_t3.RANK
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Excel(エクセル) Excelでデータを抽出するに良い方法 9 2023/02/06 12:42
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- その他(データベース) accessについて 2 2022/05/31 16:58
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
SQLで、同じ値が何回連続す...
-
MySQLで特定のグループの上位3...
-
<SQL>重複しているデータの場合...
-
下記の問合せを行うクエリを、 ...
-
DISTINCTROWについてです。
-
Oracleで「文字が無効です」の...
-
SQLローダーCSV取込で、囲み文...
-
group byの並び順を変えるだけ...
-
引数によってwhere句を切り替え...
-
SELECT FOR UPDATE で該当レコ...
-
テーブルの最後(最新)のレコー...
-
int型フィールドにnullを登録で...
-
where句中のtrim関数について
-
count関数の値をwhere句で使用...
-
「数字で始まらない」ものを抽...
-
BLOBやCLOBのパフォーマンスを...
-
【PL/SQL】FROM区に変数を使う方法
-
単一グループのグループ関数で...
-
時間帯テーブルから直近空き時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
複数のテーブルから値を合計出...
-
MySQLのdatetime型に0月0日を格納
-
最新の日付と2番目の日付のデー...
-
mysqlでクロス集計を取りたいが...
-
サブクエリを使わない方法
-
Mysqlで最新の日付を持つデータ...
-
SQLで、同じ値が何回連続す...
-
SQL 重複しないJoinの仕方を教...
-
型変換
-
MySQLで特定のグループの上位3...
-
日付検索で0001-01-01 00:00:00...
-
SQLです。下記の問合せを行うク...
-
直近1ヶ月に誕生日を迎える社員...
-
ここで「interval」は どんな働...
-
先期末日の日付を求めるSQL
-
mysqlのif文かcase文で複数条件...
-
MySQLで日付(date)型のdefaul...
-
日付のフォーマット
-
「8月の第3土日」をデータベ...
おすすめ情報