• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:inner joinをすると数がおかしくなります)

inner joinをすると数がおかしくなります

このQ&Aのポイント
  • SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。
  • t1テーブルとt2テーブルをinner joinすると結果が44になってしまうが、なぜそうなるのか教えてください。
  • 希望する結果はt1.stockの値である22を表示したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.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

mellow91
質問者

お礼

ご回答ありがとうございます!教えて頂きました通り、from句でサブクエリを書いたら見事にやりたいことが実現しました。ありがとうございました!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

リレーションの仕組みの基本が理解できていないようです よくよく参考書を読まれた方がよろしいかと 今回のケースであればこんな処理でしょうか? //準備 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

mellow91
質問者

お礼

ご回答ありがとうございます!コードまで丁寧に書いて頂き感謝です。リレーションの理解が不十分でお恥ずかしいです。感謝です!

回答No.1

INNER JOINは2個のテーブルを結合し1個のテーブルとして処理します。 出来たテーブルは t1.ID,t1.在庫,t2.ID,t2.出庫 001,22,001,17 001,22,001,3 で、2行のテーブルとなり、これを処理するんで44となります。

mellow91
質問者

お礼

ご回答ありがとうございます!原因がよくわかりました!

関連するQ&A