【问题标题】:Ambiguous left joins in MS AccessMS Access 中的模棱两可的左连接
【发布时间】:2012-07-31 06:47:20
【问题描述】:

我想从 T-SQL 转换以下查询

SELECT
    * 
FROM
    A                            LEFT JOIN
    B ON A.field1 = B.field1     LEFT JOIN
    C ON C.field1 = A.field2 AND
         C.field2 = B.field2

到 Jet SQL。
现在 MS Access 不接受模棱两可的查询。我怎样才能做到这一点?我不能将第二个比较放在WHERE 子句中。为什么?因为我的场景是我正在选择 C ​​中不存在的记录。

How to select all records from one table that do not exist in another table?

现在,您在 MS Access 中是如何做到的?提前感谢您的时间和专业知识。

【问题讨论】:

    标签: sql-server tsql ms-access jet


    【解决方案1】:

    您需要一个派生表才能在 MS Access 中进行这项工作:

    SELECT * 
    FROM (
       SELECT A.Field1, A.Field2 As A2, B.Field2 
       FROM A 
       LEFT JOIN B ON A.field1 = B.field1) AS x 
    LEFT JOIN C ON  x.A2 = C.field1 AND  x.field2= C.field2 
    

    【讨论】:

    • 哎哟!在 MS Access 中查询太痛苦了!被选为正确答案。
    【解决方案2】:

    来自帮助LEFT JOIN, RIGHT JOIN Operations

    您可以链接多个 ON 子句。参见子句链接的讨论 在 INNER JOIN 主题中查看这是如何完成的。

    您还可以在 JOIN 语句中链接多个 ON 子句,使用 以下语法:

    SELECT fields 
    FROM table1 
         INNER JOIN table2 ON table1.field1 compopr table2.field1 
                              AND ON table1.field2 compopr table2.field2)
                              OR ON table1.field3 compopr table2.field3)];
    

    但是可以这样(帮助中似乎有错误):

    SELECT * 
    FROM A 
         LEFT JOIN B ON A.field1 = B.field1
         LEFT JOIN C ON (C.field1 = A.field2 AND C.field2 = B.field2)
    

    【讨论】:

    • 我的在查询表达式中返回错误语法错误(缺少运算符)。
    • 嗨,Igor,我想澄清一下您是否已经测试过脚本。表B和C或A和B不应该有括号吗?
    • @yoitsfrancis 是的,我已经测试过脚本,括号是我上次更新的脚本中必不可少的。
    • 嗨,Igor,它返回一个我不支持的 JOIN 表达式
    猜你喜欢
    • 2012-08-29
    • 2011-08-09
    • 2014-01-05
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多