【问题标题】:SQL QUERY - UPDATE STATEMENT WITH JOIN WITH OTHER TABLESQL QUERY - UPDATE STATEMENT WITH JOIN WITH OTHER TABLE
【发布时间】:2013-06-19 21:11:38
【问题描述】:

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

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

谢谢,

【问题讨论】:

  • 听起来你只需要括号WHERE Item.DateCreated>'2013-06-18' and (StoreID=11 or StoreID=1 or StoreID=2 or StoreID=3)
  • 使用StoreID IN (...)而不是一堆ORs

标签: sql-server tsql join sql-update


【解决方案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 在表项中。

【讨论】:

  • INNER JOIN 给我一个错误。但是我用 a_horse_with_no_name 给了我正确的答案!谢谢!
【解决方案2】:

当您想针对多个值测试一个字段时,我发现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)

【讨论】:

  • 错误是什么?如果你得到了答案,你应该发布它以造福他人。
猜你喜欢
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多