0

Access でこの SQL 式を実行しようとしています。

Select *
From ((TableA
    Left Join TableB
        On TableB.FK = TableA.PK)
    Left Join TableC
        On TableC.FK = TableB.PK)
    Left Join (SELECT a,b,c FROM TableD WHERE b > 1) AS TableD
        On (TableD.FK = TableC.PK AND TableA.a = TableD.a)

しかし、エラーが発生し続けます: Join-Expression not supported. どうしたの?申し訳ありませんが、Jet-SQL から始めたばかりで、T-SQL では問題ありません。ありがとう

4

2 に答える 2

1

問題は、最後の外部結合条件TableA.a = TableD.aにより、クエリにあいまいな外部結合がTableA含まれることです。これは、結合先のレコードが との間のTableD結合の結果に依存するためです。TableA->TableBTableB->TableCTableC->TableD

これを回避するには、テーブル間の結合を使用してクエリを構成する必要があり、サブクエリ内に存在し、その結果が に外部結合さTableATableBます。これにより、結合が評価される順序が明確に定義されます。TableCTableD

例えば:

select * from
(
    select TableA.a, TableC.PK from
    (
        TableA left join TableB on TableA.PK = TableB.FK
    )
    left join TableC on TableB.PK = TableC.FK
) q1
left join
(
    select TableD.a, TableD.b, TableD.c, TableD.FK from TableD 
    where TableD.b > 1
) q2 
on q1.a = q2.a and q1.PK = q2.FK
于 2020-01-04T00:06:01.590 に答える