Группы без услуг

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
);

Оба варианта корректно возвращают группы без услуг.