![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
データが重複しない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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
MySQL「 INT」「 DATETIME」違い
-
<SQL>重複しているデータの場合...
-
【ExcelVBA】入力された日付か...
-
直近1ヶ月に誕生日を迎える社員...
-
MySQLで日付(date)型のdefaul...
-
Mysqlで最新の日付を持つデータ...
-
SQLで、同じ値が何回連続す...
-
SQLローダーCSV取込で、囲み文...
-
レコードの登録順がおかしい
-
2つの列が同じ値の行を取得するSQL
-
枝番の最大値とその前のデータ...
-
【PL/SQL】FROM区に変数を使う方法
-
「数字で始まらない」ものを抽...
-
group byの並び順を変えるだけ...
-
ファイルの漢数字の順番につい...
-
単一グループのグループ関数で...
-
VB データグリッドビューへの表示
-
SQL*Loader Append
-
BLOBやCLOBのパフォーマンスを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
<SQL>重複しているデータの場合...
-
最新の日付と2番目の日付のデー...
-
SQL 重複しないJoinの仕方を教...
-
DISTINCTROWについてです。
-
mysqlに格納されている日付のデ...
-
日付検索で0001-01-01 00:00:00...
-
MySQLで特定のグループの上位3...
-
SQLです。下記の問合せを行うク...
-
SQLです教えてくださいお願いし...
-
型変換
-
【ExcelVBA】入力された日付か...
-
SQLで、同じ値が何回連続す...
-
MySQLのdatetime型に0月0日を格納
-
下記の問合せを行うクエリを、 ...
-
直近1ヶ月に誕生日を迎える社員...
-
MySQLで日付(date)型のdefaul...
-
「8月の第3土日」をデータベ...
-
条件ごとに最大値を持つデータ...
-
レコードのコピー
おすすめ情報