Рассмотрим 2 таблицы (table A
и table B
) с отношением «многие ко многим», каждая из которых содержит первичный ключ и другие атрибуты.Чтобы отобразить это отношение, существует третья объединенная таблица (table C
), содержащая внешние ключи для каждой таблицы отношения (fk_tableA | fk_tableB
).
Table B
содержит повторяющиеся строки (кроме pk), поэтомуЯ хочу объединить их в одну запись с любым уникальным первичным ключом, например, так:
table B table B (after merging duplicates)
1 | Henry | 100.0 1 | Henry | 100.0
2 | Jessi | 97.0 2 | Jessi | 97.0
3 | Henry | 100.0 4 | Erica | 11.2
4 | Erica | 11.2
При объединении этих записей могут существовать внешние ключи table C
(объединенная таблица), указывающие на первичныйключи table B
, которые больше не существуют.Моя цель - отредактировать их так, чтобы они указывали на объединенную запись:
Перед объединением:
tableA table B table C
id | att1 id | att1 | att2 fk_A | fk_b
----------- ------------------- ------------
1 | ab123 1 | Henry | 100.0 1 | 1
2 | adawd 2 | Jessi | 97.0 2 | 3
3 | da3wf 3 | Henry | 100.0
4 | Erica | 11.2
При table C
ссылки на 2 записи из table B
(1 и 3), которыеслучается, дублированные строки.Моя цель - объединить их в одну запись (в table B
) и обновить внешний ключ в table C
:
После объединения:
tableA table B table C
id | att1 id | att1 | att2 fk_A | fk_b
----------- ------------------- ------------
1 | ab123 1 | Henry | 100.0 1 | 1
2 | adawd 2 | Jessi | 97.0 2 | 1
3 | da3wf 4 | Erica | 11.2
- Note that id=3 was merged/deleted from table B and the same id
was updated on table C to point to the merged record's id.
Так что мой вопрос в основном как обновить таблицу соединений при объединении записей таблицы? В настоящее время я использую Postgres и работаю с миллионами данных.