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の設定がおかしいのか、さっぱり見当がつきません。
足りない情報がありましたら補足いたしますので、どうぞよろしくお願いします。
No.1ベストアンサー
- 回答日時:
"メイン"テーブルの"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
回答ありがとうございました。
質問した後、よーくメインのテーブル内容を見てみたら、メイン.name4に、サブ4.id内にない値が入っているものがありました。これが原因で、抽出されなかったようです。
お騒がせしまして、申し訳ありませんでした。
No.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のデータの有無に関わらず表示されます。
回答ありがとうございます。
ご指摘のとおり、メイン.name4の値が不正でした。
後から追加した列だったので、ちょっと混乱してしまったようです。
お騒がせしまして、申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(パソコン・周辺機器) 2つのPCを行き来する 2 2022/06/15 01:59
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- X(旧Twitter) web版 Twitter 3 2022/12/29 15:42
- モニター・ディスプレイ マルチモニター・PC 2 2022/09/02 23:49
- iOS iPod nanoについて 2 2022/09/02 19:34
- X(旧Twitter) Twitter(X)のアカウントの作り方 Twitterでサブ垢を作りたかったので、今まであったサブ 3 2023/08/28 08:08
- LTE microsoft authenticatorアプリ 3 2023/08/05 07:31
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access 複数フォームを...
-
Accessのサブフォームから値を...
-
Access2000、これはいったい・...
-
アクセスで サブフォームの表...
-
Access2000 サブフォームのReco...
-
Accessで、サブフォームのある...
-
レコードセットで得た結果をサ...
-
ACCSESS2013VBA フォームのレコ...
-
access サブフォームにリストを...
-
(ACCESS)条件に応じて、テキ...
-
アクセスでサブフォームのレコ...
-
ACCESS サブフォームのフィール...
-
サブフォームが見えなくなる。
-
AccessのDoCmd.ApplyFilterの使...
-
Accessで、一覧からクリックし...
-
アクセス2003 - レコード追...
-
ACCESS サブフォーム MAX関数...
-
Accessでサブフォームの中の並...
-
Access VBA チェックボックスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
ACCSESS2013VBA フォームのレコ...
-
Access 複数フォームを...
-
(ACCESS)条件に応じて、テキ...
-
access サブフォームにリストを...
-
Accessのサブフォームから値を...
-
サブフォームが見えなくなる。
-
Access2000、これはいったい・...
-
サブフォームでのダブルクリッ...
-
サブフォームのデータを保存す...
-
googleフォームでインストール...
-
Accessで、一覧からクリックし...
-
ACCESSでfilterとorderbyについて
-
Access2000 サブフォームのReco...
-
レコードセットで得た結果をサ...
-
サブフォームの切り替え方を教...
-
アクセスでサブフォームのレコ...
-
AccessのFormのみをスクリーン...
-
別MDBのフォームを起動
-
Accessのコンボボックスに連動...
おすすめ情報