2011-11-26 148 views
2

我有一個Itemmaster表,並希望將itemmaster表中的價格更新爲DailySales表。SQL服務器更新查詢失敗

ItemMaster (ItemName, Price) 

DailySales (Date, ItemName, Price) 

我的查詢是:

update DailySales a 
set Price = (select b.price 
      from DailySales a, Itemmaster b where a.itemname = b.itemname) 

上面的查詢失敗。在此先感謝

+0

我得到以下錯誤 – Qinnovator

+0

它是否失敗並出現錯誤? –

+0

@Qinnovator:請**通過**編輯**更新**您的原始問題與錯誤消息** - 不要在評論中張貼更長的文本!真的很難讀.... –

回答

0
update a 
set  Price = b.Price 
from DailySales a 
     join ItemMaster b on a.ItemName = b.ItemName 
+0

同意marc_s使用'a'和'b'不是特別有用,但我認爲這可能有助於OP更好地理解它。 –

1

我假設您的查詢失敗,因爲您試圖將結果集(由SELECT返回)分配給單個列值。您需要使用INNER JOIN指定如何從每個ItemMaster單行對應於從DailySales表中的一行,那麼你就能夠分配的相應條目的價格值:

UPDATE DailySales 
    SET ds.Price = im.Price 
FROM DailySales ds 
INNER JOIN ItemMaster im ON ds.ItemName = im.ItemName 
3

你沒有告訴我們很多有關如何失敗(錯誤信息或任何東西) - 但我相信這種說法應該工作:

UPDATE ds 
SET ds.Price = im.Price 
FROM dbo.DailySales ds 
INNER JOIN dbo.Itemmaster im ON im.itemname = ds.itemname 

要記住的要點:

  • 把你的表名要更新到FROM條款,並給它一個有意義表的別名(不只是ab) - 使用該表的別名在UPDATE聲明
  • 使用INNER JOIN(而不是「嵌入」 JOIN用逗號分隔)拼寫出你的JOIN意圖和你的連接條件
+0

感謝您通知我要使用的別名 – Qinnovator