2012-10-08 64 views
0

當我運行該SELECT語句,我收到642行...加入更新不更新相同的行數爲equivelant選擇

SELECT * 
FROM _DevLoadIn a 
JOIN ArticleCompanyList b ON b.Company = a.Name 

當我運行這個UPDATE語句,只有630行被更新..

UPDATE b 
SET b.BGCompanyId = a.RelatedId 
FROM _DevLoadIn a 
JOIN ArticleCompanyList b ON b.Company = a.Name 

JOIN是相同的,所以受影響的行數如何不同?這兩個語句執行沒有錯誤。我不明白這怎麼可能。誰能提供任何見解?我錯過了關於更新/連接的工作原理嗎?

+0

做b.Company和a.Name具有相同類型和長度? – Giorgi

回答

3

最好的猜測是A的每個值都有更多的匹配。因此select語句返回A的連接重複項 - 但update只更新一次該行。

換句話說,您選擇的附加值是B(而不是A)的表示。

----更新後的問題編輯-----

你確定你要更新的正確的價值?確保正確的表(A或B)位於更新語句的左側。看起來您已經編輯了您的問題並切換了最初發布內容的位置。然而,這個理論仍然是一樣的。

+0

我不會喜歡,因爲我不確定,但這也是我最好的猜測。 – Tobsey

+0

剛剛檢查,你是對的。所以更新選擇將不會在連接中重複使用?我想我將不得不使用遊標。 – CoderMarkus

+0

你不應該使用遊標。只要根據查詢結構更新右表,更新將應用於所有找到的匹配。 – RThomas

0

如果b.BGCompanyId已經等於a.RelatedId,它將不會顯示爲已更新。

你可以通過修改原始查詢像這樣驗證這一點:

SELECT *
FROM _DevLoadIn a
JOIN ArticleCompanyList b ON b.Company = a.Name
WHERE b.BGCompanyID != a.RelatedId