架构:
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传递到布局,但我似乎找不到正确的语法。 这是我的片段类,带有和: 我想充气。分割项目,并使其包含