Одним из методов является агрегация, но для этого необходимо указать список столбцов, которые вы хотите отобразить, из таблицы autos
:
select a.id, a.name
from autos a
inner join deelnemers d on a.autonr = d.autonr
inner join evenementen e on d.evenementnr = e.evenementnr
where e.evenementnr in (201504, 201501)
group by a.id, a.name
having
max(case when e.evenementnr = 201504 then 1 else 0 end) = 1
and max(case when e.evenementnr = 201501 then 1 else 0 end) = 0
В противном случае вы также можете использовать exists
и not exists
. Это длиннее для ввода, но может работать одинаково хорошо или лучше, чем решение group by
/ having
:
select a.*
from autos a
where
exists (
select 1
from deelnemers d
inner join evenementen e on d.evenementnr = e.evenementnr
where a.autonr = d.autonr and e.evenementnr = 201504
)
and not exists (
select 1
from deelnemers d
inner join evenementen e on d.evenementnr = e.evenementnr
where a.autonr = d.autonr and e.evenementnr = 201501
)