sql server更新查询失败
我有一个sql server更新查询失败,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个Itemmaster表,想将Itemmaster表中的价格更新到DailySales表中 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) 上
Itemmaster
表,想将Itemmaster
表中的价格更新到DailySales表中
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)
上述查询失败。提前感谢我假设您的查询失败,因为您试图将结果集(由SELECT返回)分配给单个列值。您需要使用
内部联接
来指定ItemMaster中的每一行如何对应DailySales表中的一行,然后才能为相应的条目分配价格值:
update a
set Price = b.Price
from DailySales a
join ItemMaster b on a.ItemName = b.ItemName
UPDATE DailySales
SET ds.Price = im.Price
FROM DailySales ds
INNER JOIN ItemMaster im ON ds.ItemName = im.ItemName
您没有告诉我们多少关于它是如何失败的(错误消息或任何东西)-但我相信这句话应该有用:
UPDATE ds
SET ds.Price = im.Price
FROM dbo.DailySales ds
INNER JOIN dbo.Itemmaster im ON im.itemname = ds.itemname
要记住的要点:
- 将要更新的表名放入
子句中,并给它一个有意义的表别名(不仅仅是FROM
或a
)-在b
语句中使用该表别名update
- 使用
(而不是通过一个表接一个表,用逗号分隔来“嵌入”联接)来阐明联接意图和联接条件内部联接
a
和b
并不是特别有用,但我认为这可能有助于OP更好地理解它。感谢您通知我要使用的别名