24. Вывести группы без услуг
Условие задачи:
Есть таблицы:
Services(id, name, cost, price, group_id)— услуги;Groups(id, name)— группы услуг.
Необходимо вывести названия групп, в которых нет ни одной услуги.
Спойлеры к решению
Подсказки
💡 Используй
💡 Для групп без услуг поля таблицы
💡 Альтернативный вариант — использовать
LEFT JOIN, чтобы сохранить все группы.💡 Для групп без услуг поля таблицы
Services будут равны NULL.💡 Альтернативный вариант — использовать
NOT EXISTS.Решение
Вариант через LEFT JOIN:
SELECT g.name
FROM Groups g
LEFT JOIN Services s
ON s.group_id = g.id
WHERE s.id IS NULL;
LEFT JOIN сохраняет все группы, а условие:
WHERE s.id IS NULL
оставляет только те, для которых не найдено ни одной услуги.
Альтернативный вариант через NOT EXISTS:
SELECT g.name
FROM Groups g
WHERE NOT EXISTS (
SELECT 1
FROM Services s
WHERE s.group_id = g.id
);
Оба варианта корректно возвращают группы без услуг.