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

时间:2018-10-10 12:07:47

标签: sql postgresql

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

table1:

id website_id   other_column
1   14            33
2   12            90
3   56            51
....

与table2相同,.....

需要通过其他新的网站ID来更新网站ID

例如: 14需要替换为67,

12需要替换为34

56需要替换为92,

同样。...

注意:我有一个数据,其中需要将哪个website_id替换为新的website_id

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

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

2 个答案:

答案 0 :(得分:1)

您可以在一个data modifying CTE中更新所有表,这也意味着您只需指定一次替换项即可:

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;

在线示例:https://rextester.com/OQI6307

答案 1 :(得分:0)

可能看起来像这样。可以通过遍历table_mapped_changes中的行/表来使其动态。

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