Используйте 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) может помочь, если СУБД поддерживает индексирование выражений.