gpt4 book ai didi

sql - 无法绑定(bind)多部分标识符 - 子查询

转载 作者:行者123 更新时间:2023-12-03 20:51:37 25 4
gpt4 key购买 nike

架构:

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:有关该问题的更多信息。

最佳答案

您不能从另一个连接子查询中的连接访问别名。您将需要使用以下连接两个列/表的子查询:

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

或者这可以写成:
SELECT * 
FROM TableA a
INNER JOIN TableB b
ON b.B1=a.A1
INNER JOIN TableC c
ON c.C2=b.B2
AND c.C1 = b.B1

关于sql - 无法绑定(bind)多部分标识符 - 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com