Я бы использовал not exists
следующим образом:
select s.*
from store s
where not exists (
select 1
from dvd d
inner join movie m on m.movieID = d.movieID
where m.producerName <> 'BBC' and d.storeID = s.storeID
)
Это выбирает магазины, у которых нет mov ie от производителя, кроме BB C. Вы можете указать более точно c, добавив еще одно exists
условие:
select s.*
from store s
where
exists (
select 1
from dvd d
inner join movie m on m.movieID = d.movieID
where m.producerName = 'BBC' and d.storeID = s.storeID
)
and not exists (
select 1
from dvd d
inner join movie m on m.movieID = d.movieID
where m.producerName <> 'BBC' and d.storeID = s.storeID
)
Другим вариантом является агрегирование:
select s.storeID, s.storeName
from store s
inner join dvd d on d.storeID = s.storeID
inner join movie m on m.movieID = d.movieID
group by s.storeID, s.storeName
having bool_and(m.producerName = 'BBC')