我同样需要更新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条更新查询是不可行的解决方案!
除了执行多个更新查询之外,还有什么可行的方法?
答案 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;
答案 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'