我正尝试在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中一切都很好。谢谢
发布于 2020-01-04 08:06:02
问题是,最终的外连接条件TableA.a = TableD.a将导致查询包含ambiguous outer joins,因为TableA连接到TableD的记录将取决于TableA->TableB、TableB->TableC和TableC->TableD之间连接的结果。
为了避免这种情况,您可能需要用子查询中存在的表TableA、TableB和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发布于 2020-01-04 08:55:27
考虑将每个连接关联到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)https://stackoverflow.com/questions/59585621
复制相似问题