2017-04-14 142 views
0

我有下面的查詢來更新表o的字段sku到表p的字段AutoSKU。並運行它給我錯誤:「不明確的列名'sku'」。我也知道這個問題是因爲在WHERE條件下引擎不知道我在說什麼sku。但我需要這個條件來確保每個更新行都被正確映射。用o.sku替換sku會給出另一個錯誤「多部分標識符」o..sku「無法綁定」。有任何想法嗎?Sql Update - 不明確的列名

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND sku = a.Sku 
+1

這裏'AND sku = a.Sku'你必須在第一個'sku'前加適當的表別名。 –

+1

你的問題沒有意義。你已經在'on'條款中有'Sku'的條件。它不需要在'WHERE'子句中重複。 –

+0

你是對的,@GordonLinoff。我只是很擔心引擎在更新查詢中使用FROM子句中的o表來處理o表。謝謝! –

回答

1

這很可能是由於最後一行 - AND sku = a.Sku你需要別名第一sku欄,如下圖所示:

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND o.sku = a.Sku -- a bit redundant 

雖然作爲@GordonLinoff提到的,你並不需要這個條件在WHERE條款中,因爲您已在ON條款中擁有它。

+0

正如我所提到的,這一個會帶來錯誤。我已經嘗試過了。但戈登是正確的,我已經試過了,沒有這個條件,它帶來了正確的結果。謝謝! –

0

這應該是罰款:

UPDATE o 
    SET sku = p.AutoSKU 
    FROM o JOIN 
     a 
     ON a.Sku = o.sku JOIN 
     p 
     ON p.Code = a.ProductCode 
    WHERE o.sku <> p.AutoSKU; 

ON條款已經對sku S中的狀態。 WHERE條款中沒有必要重複這一點。

另外,請不要使用WITH (NOLOCK),除非您非常有意使用它,並且您知道它的作用。

最後,您的錯誤消息表明您在該版本的查詢中存在拼寫錯誤。 o..skuo.sku不一樣。