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

解決済みの質問

SQL LEFT JOIN

SQLでわからないことがあるので質問させていただきます。

例えばの話ですが在庫テーブルというテーブルがあってそこに商品マスタ
をLEFT JOINする際に

SELECT * 
FROM 在庫テーブル LEFT JOIN 商品マスタ
ON 品番 = 品番

として実行すると返ってくる結果は在庫テーブルの全レコードと
品番で結んだ商品マスタに存在するデータってことですか?
上記のSQLと

SELECT *
FROM 在庫テーブル

で返ってくるレコード件数が違うという時はどういう可能性が考えられるでしょうか?
ちなみに商品マスタの品番レコードはすべてユニークになっていて
色やサイズで品番が複数存在するものではありません。
何回やってもレコード件数が前者のほうが多くなってしまいます。
分かる方がいらしたらぜひ教えていただきたいです。

投稿日時 - 2010-02-22 20:33:36

QNo.5698100

困ってます

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

もしかすると、「ON」で条件を指定する際、
テーブルの指定をしてないんじゃないですか?


<例1>
SELECT *
FROM 在庫テーブル LEFT JOIN 商品マスタ
ON 在庫テーブル.品番 = 商品マスタ.品番;

または

<例2>
SELECT *
FROM 在庫テーブル A LEFT JOIN 商品マスタ B
ON A.品番 = B.品番;

投稿日時 - 2010-02-23 15:00:10

お礼

回答ありがとうございます。
無事解決できました。

投稿日時 - 2010-02-24 12:17:15

ANo.4

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

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

回答(4)

ANo.3

またまたすみません。先程の修正は間違いです・・・
最初の回答を確認してみて下さい。

投稿日時 - 2010-02-23 10:46:09

ANo.2

すみません先程の回答を修正します。

>SELECT * 
>FROM 在庫テーブル LEFT JOIN 商品マスタ
>ON 品番 = 品番
>
>として実行すると返ってくる結果は在庫テーブルの全レコードと
>品番で結んだ商品マスタに存在するデータってことですか?

商品マスタの品番が重複していなければ、
在庫テーブルの全レコードと品番で結んだ
商品マスタに存在するデータを取得できるはずです。


まずは商品マスタの品番が重複していないこと(1)、(2)の
select文を実行して確認して下さい。

(1)select count(品番) as 件数 from 商品マスタ;
(2)select sum(件数) as 件数 from (select count(品番) as 件数 from 商品マスタ group by 品番);

(1)、(2)共に件数は同一でしょうか?

投稿日時 - 2010-02-23 10:39:27

ANo.1

>SELECT * 
>FROM 在庫テーブル LEFT JOIN 商品マスタ
>ON 品番 = 品番
>
>として実行すると返ってくる結果は在庫テーブルの全レコードと
>品番で結んだ商品マスタに存在するデータってことですか?

商品マスタの品番が重複していなければ、
在庫テーブルの全レコードと品番で結んだ
商品マスタに存在するデータを取得できるはずです。


まずは商品マスタの品番が重複していないこと(1)、(2)の
select文を実行して確認して下さい。

(1)select count(品番) from 商品マスタ;
(2)select count(品番) from (select 品番 from 商品マスタ group by 品番);

(1)、(2)共にcount数は同一でしょうか?

投稿日時 - 2010-02-23 09:58:58

あなたにオススメの質問