Очистка таблицы Person от повторяющихся email‑адресов

Удалите строки, для которых существует запись с тем же email и меньшим id. Для PostgreSQL можно использовать DELETE ... USING; перед реальным удалением сначала проверьте выбранные строки и резервную копию.

Короткий ответ

Что ответить на собеседовании

Удалите строки, для которых существует запись с тем же email и меньшим id. Для PostgreSQL можно использовать DELETE ... USING; перед реальным удалением сначала проверьте выбранные строки и резервную копию.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо удалить все дубли email‑адресов из таблицы Person, оставив только запись с наименьшим значением id для каждого уникального адреса.

Input: +----+-------------------+ | id | email | +----+-------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+-------------------+ Output: +----+-------------------+ | id | email | +----+-------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+-------------------+

Ответ

Удалите строки, для которых существует запись с тем же email и меньшим id. Для PostgreSQL можно использовать DELETE ... USING; перед реальным удалением сначала проверьте выбранные строки и резервную копию.

Вариант с явной обработкой NULL как одинаковых значений:

DELETE FROM Person AS duplicate
USING Person AS original
WHERE duplicate.email IS NOT DISTINCT FROM original.email
  AND duplicate.id > original.id;

При уникальном id останется минимальный id каждой группы. Если NULL не должен считаться дубликатом, замените сравнение email на обычное равенство и уточните правила. Удаление может влиять на внешние ключи; сначала нужен план для связанных данных. Для предотвращения новых дублей добавляют подходящее уникальное ограничение.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее