【问题标题】:Wrong update in SQL ServerSQL Server 中的错误更新
【发布时间】:2023-03-13 01:05:02
【问题描述】:

更新查询有效,但不正确。

有什么问题?

UPDATE Orders
SET discount = 10
WHERE EXISTS (SELECT C.discount 
              FROM Orders AS C
              JOIN OrderItems AS O ON C.orderID = O.orderID
              WHERE (C.dateOrder BETWEEN '01.07.2013' AND GETDATE()) 
              GROUP BY C.discount
              HAVING COUNT(O.orderID) > 1) 

这本身就有效

SELECT C.discount 
FROM Orders AS C 
JOIN OrderItems AS O ON C.orderID = O.orderID
WHERE (C.dateOrder BETWEEN '01.07.2013' AND GETDATE()) 
GROUP BY C.discount
HAVING COUNT(O.orderID) > 1

而且结果是正确的

【问题讨论】:

  • “不正确”究竟是什么意思?
  • 您似乎没有引用您在存在子句中更新的表...
  • 我们不知道您要达到什么目的,因此您需要解释一下,以便我们了解它是如何不起作用的。
  • 查询显示 2 列。更新更新整个表
  • 所以请展示一些示例数据,以及您的预期结果。并尝试用文字进行解释,例如“我想更新所有带有折扣的订单和多个订单行以获得 10% 的新折扣”。

标签: sql sql-server tsql sql-update


【解决方案1】:

我认为这可能会做你想做的事 - 但我猜我并没有完全理解你想要做什么。

UPDATE C SET
  discount = 10
FROM ORDERS C
WHERE C.dateOrder between '01.07.2013' and GETDATE()
-- Updating only orders with an existing discount
AND C.discount IS NOT NULL
-- And with more than 1 order line
AND (
  SELECT COUNT(*)
  FROM OrderItems AS O 
  WHERE O.orderID = C.orderID
) > 1 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2019-10-17
    相关资源
    最近更新 更多