![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
AccessのSQLで外部結合を複数使うと
SQLがエラーになります。
クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。
どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。
SQL = SELECT * FROM T1
LEFT JOIN T2 ON T1.A = T2.A
LEFT JOIN T3 ON T1.B = T3.B
LEFT JOIN T4 ON T1.C = T4.C
AND T4.D = iNum
WHERE T1.E = 'iNum'
やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは
T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。
Accessでは"AND T4.D = iNum"がだめで、
WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。)
さらに
SQL = SELECT * FROM ((T1
LEFT JOIN T2 ON T1.A = T2.A)
LEFT JOIN T3 ON T1.B = T3.B)
LEFT JOIN T4 ON T1.C = T4.C
AND T4.D = iNum
WHERE T1.E = 'iNum'
こんな括弧が必要になってくる。
これだとT1とT2を外部結合した結果をT3と外部結合して
さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。
結果は同じなのでAccessに譲ってやってもいいのですが
前者はT1で抽出されなければならないデータが抽出されないので困ります。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
失礼、記述ミスしてました。
書きたかったのは、以下のSQLです。
SELECT * FROM ((T1
LEFT JOIN T2 ON (T1.A=T2.A))
LEFT JOIN T3 ON (T1.B=T3.B))
LEFT JOIN T4 ON (T1.C=T4.C AND T1.E=T4.E)
WHERE T1.E = 'iNum'
お返事おそくなって申し訳ありません。
回答いただいたSQLですが、
T4にEという項目はなく、
T1.E=T4.Eはできません。
No1の回答で私のつくったSQLをみていただいたら
何がしたかったのかがわかっていただけると思います。
ありがとうございました。
No.1
- 回答日時:
たぶん、こんな感じで良いないかと。
SELECT * FROM ((T1
LEFT JOIN T2 ON (T1.A=T2.A))
LEFT JOIN T3 ON (T1.B=T3.B))
LEFT JOIN T4 ON (T1.C=T4.C AND T1.D=T4.D)
WHERE T1.E = 'iNum'
気になる部分だけ、コメントを書きますが・・
>これだとT1とT2を外部結合した結果をT3と外部結合して
>さらにその結果をT4と外部結合しているという意味あいになってしまって、
>意図が違うのですが。。
T1を基準として、結合条件とするなら、外部結合は、どのような順番で行っても、
結果は変わりませんよ。(少なくとも、上記の条件であれば、同じハズ)
早速回答いただき、ありがとうございます。
せっかく回答いただいたのですが、
>LEFT JOIN T4 ON (T1.C=T4.C AND T1.D=T4.D)
>WHERE T1.E = 'iNum'
T1には"D"という項目はなく、
T4のなかのT4.D = 'iNum' を満たすレコードのみ
CというKeyでT1と外部結合させたいのです。
今これを書いていて思いついたのですが、
SELECT * FROM ((T1
LEFT JOIN T2 ON (T1.A=T2.A))
LEFT JOIN T3 ON (T1.B=T3.B))
LEFT JOIN (SELECT * FROM T4 WHERE T4.D ='iNum') AS T5 ON T1.C=T5.C
WHERE T1.E = 'iNum'
でいけました~。
他に何かご存知の方ありましたら
教えてください。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- その他(教育・科学・学問) エクセル関数について 2 2022/12/23 08:59
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じ表を複数回結合する場合
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
作番ってどういう意味でしょうか?
-
Accessでテーブル名やクエリ名...
-
3つの表を1つに縦に連結する
-
Accessのフィールド数が255しか...
-
SUBSTRING 関数に渡した長さの...
-
異なるサーバのDBデータ同士を...
-
セルの右クリックで出る項目を...
-
ACCESSのクエリで集計で、先頭...
-
Vbaでアクセスからエクセルにリ...
-
access2000:フォームで入力し...
-
Accessレポートで特定条件で改...
-
Accessレコードの追加や変更が...
-
Accessで数値型にNULLをInsert...
-
空白をそのままインポートする...
-
データベースの1要素に複数デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複した複数データを一つのレ...
-
sever2000使用時に検索がひっか...
-
Accessの表結合SQL
-
抽出が出来ないくらい遅いクエリ
-
Pro*C桁うめについて
-
postgres 外部結合(AからB、Bか...
-
外部結合
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
Access テキスト型に対する指定...
-
Accessのフィールド数が255しか...
-
Accessでコードを入れると名前...
-
Oracle 2つのDate型の値の差を...
-
作番ってどういう意味でしょうか?
-
ACCESSのクエリで集計で、先頭...
-
変数が選択リストにありません
-
テーブルの存在チェックについて
おすすめ情報