如何解决在SQL中使用连接进行更新并非在所有行上都有效
我有两个表,表A
name | amount
a | 100
b | 200
C | 300
和表B一样
name | amount
a | 50
b | 50
C | 100
a | 200
我想更新表A,我的查询就是这样
UPDATE A
SET A.Amount += B.Amount
FROM A
INNER JOIN B ON B.Name = A.Name
我希望看到
a | 350
但返回
a | 150
解决方法
这是一种方法...
update table_a
set amount = y.amount
from
(
select name,sum(amount) as amount
from
(
select name,amount
from table_a
union
select name,amount
from table_b
)z
group by name
)y
where table_a.name = y.name
,
假设您需要更新整个表,只需使用子查询即可,无需过度复杂。
UPDATE A SET Amount += COALESCE((SELECT SUM(B.Amount) from B where B.[Name] = A.[NAME]),0);
,
在加入之前,您需要先汇总b
。我建议:
UPDATE A
SET A.Amount = A.Amount + B.Amount
FROM A JOIN
(SELECT B.NAME,SUM(B.Amount) as Amount
FROM B
GROUP BY B.NAME
) B
ON B.Name = A.Name;
尤其是,我强烈建议在相关子查询解决方案上使用此方法,因为该解决方案会更新每一行。这样只会更新B
中的名称。
查询的问题是多行符合JOIN
条件。 UPDATE
仅(任意)选择一个。 SQL Server文档中对此进行了详细说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。