あなたは書ける:
SELECT t1.organizer_id
FROM ( SELECT eo.organizer_id,
COUNT(1) AS num_events
FROM event_organizer eo
JOIN event e
ON eo.event_id = e.event_id
WHERE e.year BETWEEN 2010 AND 2012
GROUP
BY eo.organizer_id
) t1
JOIN ( SELECT COUNT(1) AS num_events
FROM event e
WHERE e.year BETWEEN 2010 AND 2012
) t2
ON t1.num_events = t2.num_events
;
(上記の考え方は、主催者ごとに、2010年から2012年の間に開催されたイベントの数を調べます。次に、これを2010年から2012年のイベントの総数と比較します。これら2つの数が同じ場合、その後、主催者はその期間のすべてのイベントを開催しました。)
または、次のように書くこともできます。
SELECT organizer_id
FROM organizer -- I assume you have an 'organizer' table?
WHERE organizer_id NOT IN
( SELECT o.organizer_id
FROM event e
CROSS
JOIN organizer o
LEFT
OUTER
JOIN event_organizer eo
ON e.event_id = eo.event_id
AND o.organizer_id = eo.organizer_id
WHERE e.year BETWEEN 2010 and 2012
AND eo.event_id IS NULL
)
;
(これのアイデアは、主催者がイベントを主催しなかったようなすべてのイベントと主催者の組み合わせを見つけることです。次に、そのような組み合わせに表示されないすべての主催者を返します。)