当前位置: 首页 > 面试题库 >

多部分标识符无法绑定-SubQuery

尉迟禄
2023-03-14
问题内容

架构:

create table TableA (A1 int)
create table TableB (B1 int, B2 int)
create table TableC (C1 int)

问题查询:

SELECT * 
FROM TableA a
INNER JOIN TableB b ON b.B1=a.A1
INNER JOIN (SELECT TOP 1 * 
            FROM TableC c
            WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
INNER JOIN OtherTable ON OtherTable.Foo=d.C1

生成此架构并在SQL Server 2008下在SQLFiddle中运行查询将导致:

The multi-part identifier "b.B1" could not be bound.: SELECT * FROM TableA a INNER JOIN TableB b ON b.B1=a.A1 INNER JOIN (SELECT TOP 1 * FROM TableC c WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2

对子查询使用CROSS APPLY而不是INNER JOIN可以解决此问题

有什么问题?

编辑:我添加了“ TOP 1”,它是真正查询的一部分,并且是问题的相关部分。

Edit2:有关该问题的更多信息。


问题答案:

您不能将fromJOIN子句引用到JOIN的另一部分。

改用它。

SELECT * 
FROM TableA a
INNER JOIN TableB b
    ON b.B1=a.A1
INNER JOIN TableC c
    ON d.C2=b.B2
      AND c.C1=b.B1

已编辑

SELECT * 
FROM TableA a
INNER JOIN TableB b ON b.B1=a.A1
WHERE b.B2 = (SELECT TOP 1 c.C2 
               FROM TableC c
               WHERE c.C1=b.B1 ORDER BY c.C1)

TableC在JOIN-s中进一步使用,可以使用它。

SELECT * 
FROM TableA a
    INNER JOIN TableB b
        ON b.B1=a.A1
    INNER JOIN
       (
           SELECT
               ROW_NUMBER() OVER (PARTITION BY C1 ORDER BY C2) RN,
               C2
               --, other columns fromTableC if needed
           FROM TableC
       ) CC
     ON b.B2 = CC.C2
       AND CC.RN = 1


 类似资料:
  • 问题内容: 试试这个 给出错误 不能绑定多部分标识符“ tblJobBudget.lastmodifiedby”。 问题答案: 这是因为没有任何带有标识符的表或表别名。 您的表是: 但不是: 如果需要表中的列,则应在表中包含一个子句:

  • 问题内容: 我的错误讯息: 多部分标识符table2.ValidSince“无法绑定。 我需要如何更改更新才能使其正常工作? 问题答案: 您需要加入

  • 问题内容: 我有2张桌子: Table1 =加油站名称(成对) Table2 =具有坐标信息(经度和纬度等) 表1的 示例: 表 2的 示例: 我想使用位于中的坐标信息更新此表。我尝试根据SQL Server2005执行以下操作:无法绑定多部分标识符 我收到以下错误消息: 消息4104,级别16,状态1,第1行 无法绑定多部分标识符“ t1.Lattitude1”。 但是,如果执行以下操作,则可以

  • 问题内容: 尝试在Access 2010中运行以下SQL查询时,出现错误“无法绑定多部分标识符’MS2.ExtraValueID’”。 ExtraValueID出现在两个“附加值…”查询的WHERE子句中,但不输出。 从几年前回头看这个问题,这表明这可能是由于错字造成的。但是,我看不到上面的SQL有什么问题,这表明组成这个更大的查询的单个查询之一是错误的。 但是,每个查询都可以单独运行,并且,如果

  • 我想包括一个布局与数据绑定。 我想使用将id从java传递到布局,但我似乎找不到正确的语法。 这是我的片段类,带有和: 我想充气。分割项目,并使其包含