Отсутствие профиля проверяется через NOT EXISTS. Для пользователей с несколькими профилями сначала находят группы с COUNT(*) > 1, затем выводят каждый профиль.
-- Написать два запроса:
Отсутствие профиля проверяется через NOT EXISTS. Для пользователей с несколькими профилями сначала находят группы с COUNT(*) > 1, затем выводят каждый профиль.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
-- Написать два запроса: -- Запрос 1: Вывести все id пользователей у которых нет профилей -- Запрос 2: Для пользователей у которых более одного профиля вывести id пользователя и id профилей
Ответ
Отсутствие профиля проверяется через NOT EXISTS. Для пользователей с несколькими профилями сначала находят группы с COUNT(*) > 1, затем выводят каждый профиль.
Для примерной схемы users(id), profiles(id, user_id):
SELECT u.id
FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM profiles p WHERE p.user_id = u.id
);
SELECT p.user_id, p.id AS profile_id
FROM profiles p
JOIN (
SELECT user_id FROM profiles
GROUP BY user_id HAVING COUNT(*) > 1
) multiple ON multiple.user_id = p.user_id
ORDER BY p.user_id, p.id;
Имена таблиц заданы как допущение, поскольку схема не приложена. Второй запрос выводит отдельную строку на профиль, не агрегированный список идентификаторов.