Собесов

SQL — найти все связанные записи по id/phone/mail (рекурсивный CTE)

SQLRecursive CTEСложнаяMiddle

Условие

Дана таблица с колонками:

key id phone mail
1 12345 89997776655 test@mail.ru
2 54321 87778885566 two@mail.ru
3 98765 87776664577 three@mail
4 66678 87778885566 four@mail.ru
5 34567 84547895566 four@mail.ru
6 34567 89087545678 five@mail.ru

По заданному значению поля (id, phone или mail) нужно вернуть все связанные записи — то есть транзитивно склеенный «островок» записей, которые так или иначе делят id/phone/mail друг с другом.

Например, для phone = 87778885566:

  • запись 2 матчится напрямую (phone = 87778885566);
  • запись 4 матчится тем же телефоном;
  • запись 5 разделяет mail = four@mail.ru с записью 4 → подтягивается;
  • запись 6 разделяет id = 34567 с записью 5 → тоже подтягивается.

Итог: записи 2, 4, 5, 6.

Задача — типичная дедупликация / антифрод: нужно построить «связные компоненты» по графу записей.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти