首页 > 解决方案 > MS Acces Jet SQL 错误:多个连接条件不支持连接表达式

问题描述

我正在尝试在 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)

但它不断收到错误:不支持加入表达式。有什么问题?抱歉,我刚从 Jet-SQL 开始,在 T-SQL 中一切正常。谢谢

标签: sqlms-accessjetjet-sql

解决方案


问题是最终的外连接条件TableA.a = TableD.a将导致查询包含不明确的外连接,因为要TableA连接到的记录TableD将取决于和之间TableA->TableB的连接结果。TableB->TableCTableC->TableD

为避免这种情况,您可能需要使用表之间的连接来构造查询TableATableB&TableC存在于子查询中,然后将其结果外部连接到TableD. 这明确定义了评估连接的顺序。

例如:

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

推荐阅读