Tsql “多部分标识符”;t、 零件号“;无法与联盟绑定
我需要TableMain中的记录,它在ActivePNs中有一个记录匹配,在[Parts]中也有一个匹配。似乎一个连接应该可以做到这一点,但我一直遇到“无法绑定”或“无效列名”错误 我确信我可以通过创建一个临时表来完成我所需要的,但我尽量保持它的简单Tsql “多部分标识符”;t、 零件号“;无法与联盟绑定,tsql,Tsql,我需要TableMain中的记录,它在ActivePNs中有一个记录匹配,在[Parts]中也有一个匹配。似乎一个连接应该可以做到这一点,但我一直遇到“无法绑定”或“无效列名”错误 我确信我可以通过创建一个临时表来完成我所需要的,但我尽量保持它的简单 Select * from TableMain t INNER JOIN (select [PartNumber] From ActivePNs ap Where ap.PartNumber = t.PartNumber
Select * from TableMain t
INNER JOIN (select [PartNumber]
From ActivePNs ap
Where ap.PartNumber = t.PartNumber
Union
select [Number] PartNumber
From [Parts] p
Where p.Number = t.PartNumber) c
On t.PartNumber = c.PartNumber
假设ActivePNs中没有多行或给定零件号的零件,那么据我所知,这应该可以做到——只在TableMain中查找ActivePNs和零件中有零件号的行:
您的问题在于
联合后的选择
select [Number] PartNumber -- You rename Number to PartNumber
From [Parts] p
Where p.Number = t.PartNumber -- but still reference Number here
SELECT
中的Number
的别名表示在查询的WHERE
部分中没有列p.Number
。派生表不能与其所联接的表相关联。您尝试执行的操作可以如下所示:
SELECT
t.*,
COALESCE(ap.PartNumber, p.Number) AS PartNumber
FROM TableMain t
LEFT JOIN ActivePN ap ON ap.PartNumber = t.PartNumber
LEFT JOIN Parts p ON p.Number = t.PartNumber
WHERE NOT (ap.PartNumber IS NULL AND p.Number IS NULL)
你的意思是:哪里不是(ap.零件号为空,p.编号为空)@JonV:基本上是的。我通常在这种情况下测试PKs,但我应该马上澄清这一点,或者使用您的版本。更新了我的答案。抱歉-我正在TableMain中查找在ActivePNs或Parts中具有PartNumber的行。叹气-我也想到ActivePN和Part有一些相同的记录。所以我也需要做一个小组,看起来。。。
SELECT
t.*,
COALESCE(ap.PartNumber, p.Number) AS PartNumber
FROM TableMain t
LEFT JOIN ActivePN ap ON ap.PartNumber = t.PartNumber
LEFT JOIN Parts p ON p.Number = t.PartNumber
WHERE NOT (ap.PartNumber IS NULL AND p.Number IS NULL)