SQL Server 中的错误更新
Posted
技术标签:
【中文标题】SQL Server 中的错误更新【英文标题】:Wrong update in SQL Server 【发布时间】:2020-07-02 03:38:27 【问题描述】:更新查询有效,但不正确。
有什么问题?
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% 的新折扣”。 【参考方案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
【讨论】:
以上是关于SQL Server 中的错误更新的主要内容,如果未能解决你的问题,请参考以下文章