我需要更新符合我条件的所有记录。但是下面的Sql
会出现此错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
-- Set MasterAccountId = NULL where there is no Receivable with equivalent BillingAccountId and TaskAccountId
UPDATE R
SET R.MasterAccountId = NULL
FROM Receivable R
WHERE EXISTS ( SELECT * FROM MasterAccount M
WHERE (ISNULL(M.BillingAccountId, 0) > 0 AND M.BillingAccountId = R.BillingAccountId) OR
(ISNULL(M.TaskAccountId, 0) > 0 AND M.TaskAccountId = R.TaskAccountId))
基本上,我需要更新在subquery
内返回的所有记录。
有人知道如何解决它吗?
答案 0 :(得分:1)
我不认为你在发布的查询中得到的错误可能在其他地方。再次在EXISTS
子查询中,而不是说select * ...
,最好说WHERE EXISTS ( SELECT 1 FROM MasterAccount M
另请尝试使用此查询的JOIN
版本,而不是
UPDATE R
SET R.MasterAccountId = NULL
FROM Receivable R
JOIN MasterAccount M ON M.BillingAccountId = R.BillingAccountId
OR M.TaskAccountId = R.TaskAccountId
WHERE ISNULL(M.BillingAccountId, 0) > 0
OR ISNULL(M.TaskAccountId, 0) > 0;
答案 1 :(得分:1)
你可以尝试一下吗?这是https://stackoverflow.com/users/40655/robin-day在此链接How do I UPDATE from a SELECT in SQL Server?上的{{3}}响应的基础。
UPDATE
R
SET
R.MasterAccountId = NULL
FROM
Receivable R
INNER JOIN
MasterAccount M
ON
(ISNULL(M.BillingAccountId, 0) > 0 AND M.BillingAccountId = R.BillingAccountId) OR
(ISNULL(M.TaskAccountId, 0) > 0 AND M.TaskAccountId = R.TaskAccountId))