Я хочу обновить строку моей соединительной таблицы.Не буквально обновлять, вставлять только новые кортежи и отбрасывать те, которые не были вставлены.
Вот мои таблицы:
таблица пользователей
-----------------------
|user_id |FullName |
-----------------------
|1 | John |
|2 | Michael |
|3 | Bryce |
таблица адресов
-----------------------------------------
|address_id| country | city |
-----------------------------------------
| 1 | USA | New-York |
| 2 | Russia | Moscow |
| 3 | Germany | Berlin |
| 4 | UK | London |
Это таблица Junction для соединения двух.
"user_address"
------------------------
| user_id | address_id |
------------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
Например, я хочу вставить новые значения в моем соединении и сделать его похожим наэто:
------------------------
| user_id | address_id |
------------------------
| 1 | 1 |
| 1 | 3 |
| 2 | 4 |
И, да, я могу просто сделать это:
DELETE FROM user_address WHERE address_id = 1;
INSERT INTO user_address VALUES (1, 3);
Но что, если у меня будет 1 миллион строк, и пользователь захочет удалить только однустрока.
В этом случае я удалю все 1 миллион и вставлю 999.999.999 только для ОДНОЙ строки.
Итак, как я могу вставить только новые строки и отбросить те, которые не были вставлены для меня?
PS Я использую PostgreSQL.
ОБНОВЛЕНИЕ
Надеюсь, что эти скриншоты объяснят мою проблему.Вот моя таблица соединений:
Я пытаюсь обновить пользователей для адреса - измените user_id в соединении:
UPDATE user_address SET user_id = 100 WHERE address_id = 25 RETURNING user_id
Но если я использую этот запрос, он изменитсяи user_id до 100, когда я хочу иметь только одну строку с user_id = 100
Итак, вопрос в том, как избежать дубликатов в обновлении таблицы узлов.