Как обновить несколько записей без использования нескольких запросов на обновление? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть 4 таблицы, которые нужно обновить аналогичным образом (необходимо обновить около 50 записей в каждой таблице, следовательно, 50 запросов на обновление в каждой):

table1:

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

то же самое для table2, .....

Необходимо обновить website_id другим новым website_id

, например: 14 нужно заменить на 67,

12 нужно заменить на 34,

56 нужно заменить на92,

аналогично ....

Примечание: У меня есть данные, относительно которых website_id необходимо заменить на новые website_id.

Умножить на 50 около 4 = 200 запросов на обновление не выполнимо!

Каким возможным способом является выполнение нескольких запросов на обновление?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Может выглядеть примерно так.Может быть сделано динамическим, просматривая строки / таблицы в 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'
0 голосов
/ 10 октября 2018

Вы можете обновить все таблицы в одном изменении данных 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...