2

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

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 表。问题是,当我尝试同时更新更多商店时,它会更新整个项目。但是当我只更新一个商店时,它会更新得很好。有什么理由吗?

谢谢,

4

2 回答 2

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)

我假设StoreID并且DateCreated在表项中。

于 2013-06-19T21:15:53.357 回答
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)
于 2013-06-19T21:52:46.747 回答