首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Acces Jet SQL错误:多个联接条件不支持联接表达式

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

Stack Overflow用户
提问于 2020-01-04 05:35:03
回答 2查看 65关注 0票数 0

我正尝试在Access中运行此SQL表达式:

代码语言:javascript
复制
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中一切都很好。谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-01-04 08:06:02

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

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

例如:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-01-04 08:55:27

考虑将每个连接关联到FROM表,以避免嵌套关系。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59585621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档