Поиск отсутствующих имён в другой таблице

Используйте NOT EXISTS с одинаковой нормализацией регистра по обеим сторонам. Для уникальности без учёта регистра возвращайте DISTINCT LOWER(name).

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

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

Используйте NOT EXISTS с одинаковой нормализацией регистра по обеим сторонам. Для уникальности без учёта регистра возвращайте DISTINCT LOWER(name).

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

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

Условие

Необходимо составить SQL‑запрос, который выводит все значения из столбца name таблицы A, не найденные в столбце Name таблицы B. При этом запрос должен корректно обрабатывать различия в регистре символов (если сравнение чувствительно к регистру) и возвращать только уникальные имена без повторов.

Ответ

Используйте NOT EXISTS с одинаковой нормализацией регистра по обеим сторонам. Для уникальности без учёта регистра возвращайте DISTINCT LOWER(name).

SELECT DISTINCT LOWER(a.name) AS name
FROM A a
WHERE a.name IS NOT NULL
  AND NOT EXISTS (
      SELECT 1
      FROM B b
      WHERE LOWER(b.Name) = LOWER(a.name)
  );

Запрос возвращает имена в нижнем регистре. Если нужно сохранить исходное написание, потребуется правило выбора одного представителя каждой нормализованной группы. LOWER и равенство зависят от настроек языка/collation; для универсального Unicode-сравнения их согласуют отдельно. Индекс по LOWER(Name) может помочь, если СУБД поддерживает индексирование выражений.

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

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

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

Подробнее