Как обновить каждую строку с одинаковым идентификатором в postgresql по-разному? - PullRequest
0 голосов
/ 18 сентября 2018

Надеюсь, это не так сложно объяснить.Мне нужно обновить первую таблицу с адресами из второй

Так что в основном у меня есть mytable1, у которого есть следующие столбцы:

id (pkey) | super_id | address          | new_ref
101       | 1000     | 'wrong address'  | empty
102       | 1000     | 'wrong address2' | empty
103       | 1000     | 'wrong address3' | empty

И затем у меня есть mytable2, который на самом деле имеет правильные адреса:

super_id | address          | new_ref (pkey)
1000     | 'right address'  | 1
1000     | 'right address2' | 2
1000     | 'right address3' | 3

Мне нужно заполнить mytable1 правильными адресами в mytable2, и у них общий super_id

Однако, когда я пытаюсь сделать

update mytable1 a set address = (select address from mytable2 b where a.super_id = b.super_id)

Возвращаетсяошибка, потому что очевидно super_id дублируется

Есть ли способ обновить все строки адреса в mytable1?Возможно, вставка работает, но на mytable1 уже есть много данных1

1 Ответ

0 голосов
/ 18 сентября 2018

Это сложно.Если я правильно понимаю, вам нужно перечислить каждую из таблиц для обновления:

update mytable1 mt
    set address = mt2.address
    from (select mt.*, row_number() over (partition by super_id order by id) as seqnum
          from mytable1 mt
         ) mt1 join
         (select mt2.*, row_number() over (partition by super_id order by new_ref) as seqnum
          from mytable2 mt2
         ) mt2
         on mt2.super_id = mt1.super_id and mt2.seqnum = mt1.seqnum
     where mt1.id = mt.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...