SQL QUERY - 与其他表连接的更新语句

时间:2013-06-19 21:11:38

标签: sql-server tsql join sql-update

这是我提出的查询,但似乎无法正常工作。

UPDATE ItemDynamic
SET TaxID=8
FROM ItemDynamic
INNER JOIN Item
ON Item.ID = ItemDynamic.ItemID
WHERE Item.DateCreated>'2013-06-18' and StoreID=11 or StoreID=1 or StoreID=2 or StoreID=3

DateCreated列不在ItemDynamic中,此列在Item表中。所以我加入了Item表和ItemDynamic表。问题是,当我尝试同时更新更多商店时,它会更新整个商品。 但是,当我只更新一个商店时,它会更新。有什么理由吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

您的查询中有错误,您的OR子句应该用圆括号

包围
UPDATE ItemDynamic a 
INNER JOIN Item B
ON b.ID = a.ItemID 
SET a.TaxID=8 
WHERE b.DateCreated>'2013-06-18' 
AND (b.StoreID=11 OR b.StoreID=1 OR b.StoreID=2 OR b.StoreID=3)

我假设StoreIDDateCreated在表格项目中。

答案 1 :(得分:1)

当您想针对多个值测试字段时,我发现IN比一堆OR测试更清晰。它避免了您遇到的AND / OR优先级问题。

UPDATE ItemDynamic
INNER JOIN Item
SET TaxID=8
ON Item.ID = ItemDynamic.ItemID
WHERE Item.DateCreated>'2013-06-18'
AND StoreID IN (11, 1, 2, 3)