2012-01-14 52 views
1

我需要TableMain中的記錄,這些記錄在ActivePN中具有記錄匹配,並且還需要[Parts]中的匹配。看起來聯合應該做的伎倆,但我一直在反對「無法綁定」或「無效列名稱」錯誤。無法綁定多部分標識符「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 

回答

0

假設有沒有ActivePNs或零件給定的部分號碼,然後就我的理解,這應該做的伎倆多行 - 只發現在TableMain在ActivePNs 有部分號碼行配件:

Select t.* 
from TableMain t 
    INNER JOIN ActivePNs ap ON t.PartNumber = ap.PartNumber 
    INNER JOIN Parts p ON t.PartNumber = p.Number 
+0

對不起 - 我正在尋找TableMain中有ActivePNs或零件的PartNumber行。嘆氣 - 我也覺得ActivePNs和Parts有一些相同的記錄。所以我需要做一個分組似乎... – JonV 2012-01-14 23:12:54

0

你的問題是在UNIONSELECT

select [Number] PartNumber -- You rename Number to PartNumber 
    From [Parts] p 
    Where p.Number = t.PartNumber -- but still reference Number here 

NumberSELECT混疊意味着有用於查詢的WHERE部使用沒有列p.Number

0

派生表不能與它要加入的表相關聯。你正在嘗試做什麼可以這樣實現:

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) 
+1

您的意思是:WHERE NOT(ap.PartNumber IS NULL和p.Number IS NULL) – JonV 2012-01-14 22:59:36

+0

@JonV:基本上,是的。我通常在這種情況下測試PK,但我應該馬上澄清,或使用您的版本。更新了我的答案。 – 2012-01-14 23:20:12

相關問題