こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。

t1テーブルのデータ
ID,在庫
001,22

t2テーブルのデータ
ID,出庫
001,17
001,3

SELECT
Sum(t1.stock) AS `在庫`
FROM
t1
where id = '001'

上記SQLの結果は22と表示されます。

SELECT
Sum(t1.stock) AS `在庫`
FROM
t1 INNER JOIN t2 on t1.id = t2.id
where id = '001'

とやると、結果が44になってしまいます。
なぜそんな結果になってしまうのでしょうか?

結果はt1.stockは在庫22なので、22と表示するようにしたいです。
よろしくお願いいたします。

投稿日時 - 2012-02-10 11:44:56

QNo.7296711

暇なときに回答ください

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

#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

投稿日時 - 2012-02-10 12:47:14

お礼

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

投稿日時 - 2012-02-10 17:10:17

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2012-02-10 12:21:46

お礼

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

投稿日時 - 2012-02-10 17:08:03

ANo.1

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

投稿日時 - 2012-02-10 12:04:57

お礼

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

投稿日時 - 2012-02-10 17:04:20

あなたにオススメの質問