Поиск пользователей, которые не зарегистрировались для определенных слотов

Извините, если это такой базовый вопрос, но я новичок в реляционных базах данных в целом и не смог найти никакой информации, когда просматривал запросы. Я использую Microsoft Access, но я бы, наверное, понял это и с точки зрения SQL, если бы его было легче объяснить.

Допустим, у меня есть база данных людей, которые могут подписаться на определенные события.

В первой таблице (Люди) есть записи для идентификатора, который является первичным ключом, за которым следуют их имя и фамилия.

Во второй таблице (События) есть записи для идентификатора события (первичный ключ), имени и количества доступных мест.

Третья таблица (Слоты) содержит записи для идентификатора места (первичный ключ), идентификатора события и идентификатора человека.

Теперь я пытаюсь найти людей, которые не подписались, скажем, на три мероприятия. Мне удалось сделать так, чтобы слоты, на которые подписаны люди, НЕ являлись этими тремя событиями, но я не могу заставить их показывать только людей, которые не подписались на какое-либо из этих трех событий (включая людей кто не подписался ни на что). Нужно ли делать несколько запросов, чтобы сделать это?

1 ответ

Ваш тип вопроса предполагает not exists запрос:

select p.*
from people as p
where not exists (select 1
                  from slots as s inner join
                       events as e
                       on s.slot_id = e.id
                  where s.person_id = p.id and
                        e.name in ("event1", "event2", "event3")
                 );
Другие вопросы по тегам