アプリ版:「スタンプのみでお礼する」機能のリリースについて

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の設定がおかしいのか、さっぱり見当がつきません。

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

A 回答 (2件)

"メイン"テーブルの"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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/04 15:14

恐らくサブ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のデータの有無に関わらず表示されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/04 15:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!