Поиск пользователей, которые не зарегистрировались для определенных слотов
Извините, если это такой базовый вопрос, но я новичок в реляционных базах данных в целом и не смог найти никакой информации, когда просматривал запросы. Я использую 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")
);