- ベストアンサー
inner joinをすると数がおかしくなります
- SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。
- t1テーブルとt2テーブルをinner joinすると結果が44になってしまうが、なぜそうなるのか教えてください。
- 希望する結果はt1.stockの値である22を表示したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1の方の回答のようにグループ化 しなければ2レコード出力されます。 22×2だから44は当然の帰結です。 おそらくやりたいことは以下のこと でしょう。 SELECT A.z AS `在庫`,B.* FROM (SELECT SUM(stock) AS z FROM t1 WHERE id='001' GROUP BY id) A INNER JOIN t2 B ON A.id=B.id
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
リレーションの仕組みの基本が理解できていないようです よくよく参考書を読まれた方がよろしいかと 今回のケースであればこんな処理でしょうか? //準備 create table t1(ID int(3) unsigned zerofill,在庫 INT); insert into t1 values(1,22),(1,30),(1,40),(2,50); create table t2(ID int(3) unsigned zerofill,出庫 INT); insert into t2 values(1,17),(1,3); //ID=001に対して 在庫と出庫の合計をみる SELECT sum(在庫) as 在庫計,出庫計 FROM t1 left join (select ID,sum(出庫) as 出庫計 from t2 group by ID) as sub on t1.ID = sub.ID where t1.ID = '001' //IDごとにとりまとめ SELECT t1.ID,sum(在庫) as 在庫計,出庫計 FROM t1 left join (select ID,sum(出庫) as 出庫計 from t2 group by ID) as sub on t1.ID = sub.ID group by t1.ID
お礼
ご回答ありがとうございます!コードまで丁寧に書いて頂き感謝です。リレーションの理解が不十分でお恥ずかしいです。感謝です!
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
INNER JOINは2個のテーブルを結合し1個のテーブルとして処理します。 出来たテーブルは t1.ID,t1.在庫,t2.ID,t2.出庫 001,22,001,17 001,22,001,3 で、2行のテーブルとなり、これを処理するんで44となります。
お礼
ご回答ありがとうございます!原因がよくわかりました!
お礼
ご回答ありがとうございます!教えて頂きました通り、from句でサブクエリを書いたら見事にやりたいことが実現しました。ありがとうございました!