今天是个好日子。我想问一个关于我的SQL语句的问题。我正在使用SQL Server 2008,并且有一个名为“工作流事务”的表。在此表中,我有12条记录。下图是表格的内容。
我有以下SQL语句:
UPDATE Workflow_Txn
SET Status = 1
WHERE [RequestId] IN
(
SELECT [RequestId]
FROM Workflow_Txn
WHERE [OrderNumber] < (SELECT MAX(OrderNumber) FROM Workflow_Txn WHERE RequestId = 3)
AND RequestId = 3
)
我的目标是更新一个OrderID小于最大数量的请求ID,该ID将是WHERE子句中SELECT语句的输出。现在,我希望要更新的记录应仅为上述记录(在代码中为RequestId#3)。
实际发生的是,不仅更新了四个记录,它还变成了五(5)个!我现有的SQL语句有问题吗?
最佳答案
您的问题是您正在使用RequestId = 3更新所有记录。请考虑到您的子查询结果是3
,因此最终更新了所有相关记录。
您的查询相当于
UPDATE Workflow_Txn
SET Status = 1
WHERE RequestId = 3
不知道您是否有任何理由使查询变得比所需的复杂。在我看来,更简单的方法可以解决问题
UPDATE Workflow_Txn
SET Status = 1
WHERE [OrderNumber] < (SELECT MAX(OrderNumber) FROM Workflow_Txn WHERE RequestId = 3)
AND RequestId = 3
关于sql - 使用子查询进行更新-更新的次数超过所需的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17811328/