- ベストアンサー
LEFT JOINであいまいな外部結合が含まれるエラーの解決方法
- Access2000でクエリを作成する際に、LEFT JOINを使用していると「あいまいな外部結合が含まれている」というエラーが表示されることがあります。
- このエラーの解決方法は、JOINを行うテーブル名の前に明示的にテーブル名を指定するか、テーブルのエイリアスを使用することです。
- 具体的には、伝票テーブルとお支払テーブルのJOINを行う場合に、「伝票.N_伝票No」や「お支払.N_伝票No」といったようにテーブル名を明示的に指定するか、テーブルのエイリアスを使用することでエラーを解消できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
LeftJoinの結合先にInnerJoinがあると、そのエラーが生じますので、 そのInnerJoinをLeftJoinに変えます。 (クエリをデザインビューで表示させた場合でいうと、「○→□-△」でエラー。 「○-□→△」や「○→□→△」(=下の修正版)なら、エラーになりません) SELECT お支払.ID, お支払.N_伝票No, お支払.N_支払金額, お支払.N_支払区分コード FROM 伝票 LEFT JOIN (お支払 LEFT JOIN 支払区分マスター ON お支払.N_支払区分コード = 支払区分マスター.N_支払区分コード) ON 伝票.N_伝票No = お支払.N_伝票No;
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
No.1です。 > このような情報がどこをみればわかるのか すみません、私もトライ&エラーで憶えたもので・・・(汗) なので、発生したエラーに対してどう対処したら、という一覧のような ものは知らないのですが、VBAなどのコードを調べる際に使わせて もらっているサイトを、参考までに挙げておきます; (実際には、こちらのトップから入るというより、googleなどで検索した 結果からお邪魔しているのですが) http://www.tsware.jp/ http://www.accessclub.jp/ なお、前回の回答をする際に失念していたのですが、クエリを2つに 分割してやれば、InnerJoinのままでも対応可能でしたので、 以下に記しておきます。 お支払Q; SELECT お支払.ID, お支払.N_伝票No, お支払.N_支払金額, お支払.N_支払区分コード FROM お支払 INNER JOIN 支払区分マスター ON お支払.N_支払区分コード = 支払区分マスター.N_支払区分コード; 上の「お支払Q」クエリを使用し、前回回答と(ほぼ)同じ結果を返すSQL (「お支払」にあって「支払区分マスター」にないデータがある場合、 そのデータ分は結果が異なります); SELECT お支払Q.ID, お支払Q.N_伝票No, お支払Q.N_支払金額, お支払Q.N_支払区分コード FROM 伝票 LEFT JOIN お支払Q ON 伝票.N_伝票No = お支払Q.N_伝票No;
お礼
回答ありがとうございます。 クエリを分割してできる事は、わかっていたのですが、 SQL自体の納得がいかなかったことと、 VBAのソースでSQLを使うときに困る事も(??)あると思い 今後のことを考えどうしても連結してやりたかったのです。 分割の場合はINNER JOIN なので 先の例の LEFT JOIN との違い があることはわかります。 今回の場合は、最初INNER JOIN でやってましたが、むしろ LEFT JOIN のほうがこちらの意図にも、あってました。 ● LeftJoinの結合先にInnerJoinがあると、そのエラーが生じる とのご指摘のことで、ネットでいろいろ探したのですが、 自分が見つけられたのは、 http://office.microsoft.com/ja-jp/access/HP010322411041.aspx http://office.microsoft.com/ja-jp/access/HP010322511041.aspx の "INNER JOIN を LEFT JOIN または RIGHT JOIN の中にネストすることはできません" とのわずかこの文章だけです。(特に理由も書いてありません) よく考えば、わかること??なのかも??しれませんが。 トライ&エラーで得た、本当に貴重な情報を提供していただいて どうもありがとうございました。
お礼
とりあえず、できました。ありがとうございます。 いろいろ調べてたのですが、こんなあっさりできてとても助かりました。 そして、できたらこのような情報がどこをみればわかるのか教えてもらえないでしょうか。