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

解決済みの質問

テーブル結合について

SQL Serverで、メイン、サブ1、サブ2、サブ3、サブ4というテーブルがあり、以下のSQLを実行すると、メインにあるすべてのデータ(10列)が抽出されます。

SELECT *
FROM メイン INNER JOIN
サブ1 ON メイン.name1=サブ1.id INNER JOIN
サブ2 ON メイン.name2=サブ2.id INNER JOIN
サブ3 ON メイン.name3=サブ3.id

しかし、上記のSQL文に追加して、

SELECT *
FROM メイン INNER JOIN
サブ1 ON メイン.name1=サブ1.id INNER JOIN
サブ2 ON メイン.name2=サブ2.id INNER JOIN
サブ3 ON メイン.name3=サブ3.id INNER JOIN
サブ4 ON メイン.name4=サブ4.id

とすると、メイン内の10列のうち、2列しか抽出されません。

サブ4を結合しても、一つ目のSQL文と同じ結果を抽出したかったのですが、どこがおかしいのでしょうか?
SQL文がまずいのか、サブ4のテーブル内容のせいなのか、SQL Serverの設定がおかしいのか、さっぱり見当がつきません。

足りない情報がありましたら補足いたしますので、どうぞよろしくお願いします。

投稿日時 - 2002-04-04 14:00:34

QNo.246849

困ってます

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

"メイン"テーブルの"name4"列と"サブ4"テーブルの"id"列で一致する値が
2件しかないのではないでしょうか?
LEFT JOIN を使ってみてはいかがでしょうか?

通常3つ以上の結合をする場合は、括弧でくくって結合したテーブルを一つのテーブルと見なすようです。
<例>
select * from (foo INNER JOIN bar ON foo.a=bar.a)
INNER JOIN more ON foo.a=more.a

投稿日時 - 2002-04-04 14:51:02

お礼

回答ありがとうございました。
質問した後、よーくメインのテーブル内容を見てみたら、メイン.name4に、サブ4.id内にない値が入っているものがありました。これが原因で、抽出されなかったようです。
お騒がせしまして、申し訳ありませんでした。

投稿日時 - 2002-04-04 15:14:00

ANo.1

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

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

回答(2)

ANo.2

恐らくサブ4に対応するデータが2件しかないのだと思います。
SELECT *
FROM メイン INNER JOIN
サブ1 ON メイン.name1=サブ1.id INNER JOIN
サブ2 ON メイン.name2=サブ2.id INNER JOIN
サブ3 ON メイン.name3=サブ3.id LEFT JOIN
サブ4 ON メイン.name4=サブ4.id
とすると、サブ4のデータの有無に関わらず表示されます。

投稿日時 - 2002-04-04 14:57:31

お礼

回答ありがとうございます。
ご指摘のとおり、メイン.name4の値が不正でした。
後から追加した列だったので、ちょっと混乱してしまったようです。
お騒がせしまして、申し訳ありませんでした。

投稿日時 - 2002-04-04 15:16:25

あなたにオススメの質問