MS Acces Jet SQL错误:多个连接条件不支持连接表达式

问题描述 投票:0回答:2

我正在尝试在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。有什么问题?抱歉,我只是从Jet-SQL开始,在T-SQL中一切正常。谢谢

sql ms-access jet jet-sql
2个回答
1
投票

问题是最终的外部联接条件TableA.a = TableD.a将导致查询包含ambiguous outer joins,因为将TableA联接到TableD的记录将取决于TableA->TableB之间的联接结果,TableB->TableCTableC->TableD

为了避免这种情况,您可能需要使用子查询中存在的表TableATableBTableC之间的联接来构造查询,然后将其结果外部联接到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

0
投票

考虑将每个联接与FROM表相关,以避免必须嵌套关系。

SELECT *
FROM ((TableA
    LEFT JOIN TableB
        ON TableB.FK = TableA.PK)
    LEFT JOIN TableC
        ON TableC.FK = TableA.PK)
    LEFT JOIN 
          (SELECT FK,a,b,c
           FROM TableD WHERE b > 1
          ) AS TableD
        ON  (TableD.FK = TableA.PK)
        AND (TableD.a  = TableA.a)
© www.soinside.com 2019 - 2024. All rights reserved.