Sql 如何在不使用多个更新查询的情况下更新多个记录?

Sql 如何在不使用多个更新查询的情况下更新多个记录?,sql,postgresql,Sql,Postgresql,我有4个表也需要更新(每个表需要更新大约50条记录,因此每个表需要更新50条查询): 表2相同 需要通过其他新网站id更新网站id 例如: 14个需要替换为67个 12个需要替换为34个 56个需要替换为92个 同样地 注意:我有一个数据,关于哪个网站id需要替换为哪个新的网站id 大约50乘以4=200的更新查询不是一个可行的解决方案 除了执行多个更新查询之外,还有什么可行的方法?您可以在一次更新中更新所有表,这也意味着您只需要指定一次替换: with replacement (old_id,

我有4个表也需要更新(每个表需要更新大约50条记录,因此每个表需要更新50条查询):

表2相同

需要通过其他新网站id更新网站id

例如: 14个需要替换为67个

12个需要替换为34个

56个需要替换为92个

同样地

注意:我有一个数据,关于哪个
网站id
需要替换为哪个新的
网站id

大约50乘以4=200的更新查询不是一个可行的解决方案


除了执行多个更新查询之外,还有什么可行的方法?

您可以在一次更新中更新所有表,这也意味着您只需要指定一次替换:

with replacement (old_id, new_id) as (
  values 
     (12, 34),
     (56, 92), 
     .... other old/new mappings ...
     (14, 67)
), t1_update as (
  update t1 
    set website_id = r.new_id
  from replacement r
  where r.old_id = t1.website_id
), t2_update as (
  update t2
    set website_id = r.new_id
  from replacement r
  where r.old_id = t2.website_id
), t3_update as (
  update t3
    set website_id = r.new_id
  from replacement r
  where r.old_id = t3.website_id
)
update t4
  set website_id = r.new_id
from replacement r
where r.old_id = t4.website_id;

在线示例:

可能看起来像这样。可以通过循环表映射更改中的行/表来实现动态

UPDATE
    table1
SET
    id = c.new_id
FROM
    table_mapped_changes c
ON 
    id = c.old_id AND
    c.table_name = 'table1'

抱歉,之前的问题不完整,现在已更新。谢谢如果要进行相同的更新或计算,可以很容易地同时更新多行。这完全取决于你在WHERE子句中做什么/不做什么。如果您的更新都不一样,那么多个语句没有错。无论发生什么,您都需要更改所有细节。单语句并不能让它变得更简单。你能提供Postgres文档,上面写着“不要重复目标表…”请参阅来自列表的
说明“请注意,除非您打算自联接,否则目标表不得出现在来自列表中”
UPDATE
    table1
SET
    id = c.new_id
FROM
    table_mapped_changes c
ON 
    id = c.old_id AND
    c.table_name = 'table1'