【问题标题】:Why is LEFT JOIN causing a "multi-part identifier can't be bound" error when INNER JOIN does not?为什么 LEFT JOIN 在 INNER JOIN 没有的情况下会导致“无法绑定多部分标识符”错误?
【发布时间】:2014-02-28 07:55:25
【问题描述】:

尝试在 Access 2010 中运行以下 SQL 查询时,我收到错误“无法绑定多部分标识符 'MS2.ExtraValueID'”。

SELECT [Contact Details].ContactID
FROM ([Contact Details] LEFT JOIN [Extra Fields - Newsletters & Bulletins] ON [Contact Details].ContactID = [Extra Fields - Newsletters & Bulletins].ContactID) LEFT JOIN [Extra Fields - Number of Employees] ON [Extra Fields - Newsletters & Bulletins].ContactID = [Extra Fields - Number of Employees].ContactID;

ExtraValueID 出现在两个“Extra Value...”查询的 WHERE 子句中,但不输出。

查看几年前的this question,这表明这可能是由于拼写错误。但是,我看不出上面的 SQL 有什么问题,这表明构成这个更大查询的单个查询之一是错误的。

但是,每个查询单独运行良好,如果我只尝试将其中一个 Extra Fields 表连接到它,它就可以正常工作。我认为与号可能会导致问题,但是用“and”替换它们,或者完全删除它们没有任何区别。

如果我用INNER JOINs 替换LEFT JOINs,它的工作原理是它返回结果,但不是我想要的结果,因为我应该返回联系人详细信息中的所有结果,无论两者中是否有匹配的记录是否有额外字段表。

SELECT [Contact Details].ContactID, [Contact Details].[Client Code], [Extra Fields - Newsletters & Bulletins].Newsletters, [Extra Fields - Number of Employees].[Number of Employees]
FROM ([Contact Details] INNER JOIN [Extra Fields - Newsletters & Bulletins] ON [Contact Details].ContactID = [Extra Fields - Newsletters & Bulletins].ContactID) INNER JOIN [Extra Fields - Number of Employees] ON [Extra Fields - Newsletters & Bulletins].ContactID = [Extra Fields - Number of Employees].ContactID;

【问题讨论】:

    标签: sql ms-access ms-access-2010


    【解决方案1】:

    解决了 - Access 大发雷霆,因为我混合了 INNERLEFT 连接,即使 INNER 连接在构成更大查询的组成查询中并且应该刚刚输出结果.通过替换两个 Extra Fields 查询中的所有 INNER 连接,查询需要更长的时间才能运行,但运行正常。

    【讨论】:

      【解决方案2】:
      SELECT [Contact Details].ContactID
      FROM [Contact Details] LEFT JOIN [Extra Fields - Newsletters & Bulletins] ON [Contact Details].ContactID = [Extra Fields - Newsletters & Bulletins].ContactID LEFT JOIN [Extra Fields - Number of Employees] ON [Extra Fields - Newsletters & Bulletins].ContactID = [Extra Fields - Number of Employees].ContactID;
      

      删除括号()。

      为了使您的查询更具可读性,请使用 别名

       SELECT c.ContactID
       FROM [Contact Details] c 
       LEFT JOIN [Extra Fields - Newsletters & Bulletins] e
               ON c.ContactID = e.ContactID 
       LEFT JOIN [Extra Fields - Number of Employees] emp
               ON e.ContactID = emp.ContactID;
      

      【讨论】:

      • 这也行不通,恐怕会出现“语法错误:缺少运算符”错误。
      • 对于具有多个外连接的 Access SQL 查询,括号实际上是必需的。 -1
      猜你喜欢
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多