- Все компании (все атрибуты), которые участвуют в событии A
Не зная ваших данных, я бы пошел на более безопасный подход, чтобы избежать потенциальных дубликатов:условие EXISTS с коррелированным подзапросом.
SELECT c.*
FROM company c
WHERE EXISTS (
SELECT 1
FROM company_event ce
INNER JOIN event e ON e.name_evt = 'A' AND e.id_evt = ce.id_evt_crs
WHERE ce.id_cpy_crs = c.id_cpy
)
Все компании, участвующие в событии А и событии B
Вы можете добавить дополнительное условие EXISTS:
SELECT c.*
FROM company c
WHERE EXISTS (
SELECT 1
FROM company_event ce
INNER JOIN event e ON e.name_evt = 'A' AND e.id_evt = ce.id_evt_crs
WHERE ce.id_cpy_crs = c.id_cpy
)
AND EXISTS (
SELECT 1
FROM company_event ce
INNER JOIN event e ON e.name_evt = 'B' AND e.id_evt = ce.id_evt_crs
WHERE ce.id_cpy_crs = c.id_cpy
)
Все компании, участвующие в событии A ИЛИ событие B
Измените условие равенства для имени события на условие IN.
SELECT c.*
FROM company c
WHERE EXISTS (
SELECT 1
FROM company_event ce
INNER JOIN event e ON e.name_evt IN ('A', 'B') AND e.id_evt = ce.id_evt_crs
WHERE ce.id_cpy_crs = c.id_cpy
)
Все компании, которые не участвуют ни в одном событии
Это упрощает подзапрос, поскольку нам не нужно присоединяться к таблице событий.
SELECT c.*
FROM company c
WHERE NOT EXISTS (
SELECT 1
FROM company_event ce
WHERE ce.id_cpy_crs = c.id_cpy
)