【问题标题】:MS Acces Jet SQL Error: Join Expression not supported with multiple Join conditionsMS Access 获取 SQL 错误:多个连接条件不支持连接表达式
【发布时间】:2020-01-03 21:35:03
【问题描述】:

我正在尝试在 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 中一切正常。 谢谢

【问题讨论】:

标签: sql ms-access jet jet-sql


【解决方案1】:

问题是最终的外部连接条件TableA.a = TableD.a 将导致查询包含ambiguous outer joins,因为TableATableD 连接的记录将取决于@987654325 之间的连接结果@、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

【讨论】:

    【解决方案2】:

    考虑将每个连接关联到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)
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2018-05-22
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多