如何使用 SQL 中的子查询一次更新多条记录

How to update multiple records at once with subquery in SQL

我有一个要更新的建筑物列表,方法是从另一个 table 中拉出另一个字段我有一个它们的 pk/fk 标识符列表。我喜欢一次完成所有操作,而不是抛出数十个单独的更新语句,每个语句中都有一个 id。

这似乎是一项如此简单的任务,我确信它一定很简单,只是我还不知道如何正确地完成它。 SQL 似乎讨厌在更新中使用“where x in ()”。

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

这是我正在尝试的 运行。

update accountinginfo
set companyname = (select facilityname from facility)
where facilityid in (12345,12346,12347)

通过这样的记录,不使用游标,'loop' 的正确方法是什么?

sample record

您的子查询需要绑定到外部查询。

update a
set companyname = (select facilityname f from facility WHERE f.facilityid = a.facilityid)
FROM accountinginfo a
where a.facilityid in (12345,12346,12347)

您还可以使用联合更新:

update a
set companyname = f.facilityname
from accountinginfo a
join facility f on f.facilityid = a.facilityid
where f.facilityid in (12345, 12346, 12347);