Давек близко. Сначала необходимо сузить набор результатов, чтобы он включал только элементы, соответствующие таблице фильтра, а затем получить результат по счету:
select orderId
from lineitems
where ProductId
in (select productId from filter)
group by orderid
having count(distinct productid)
= (select count(distinct productid) from filter)
или с использованием объединений вместо:
select orderId
from lineitems li
inner join filter f on li.productId = f.productid
group by orderid
having count(distinct li.productid)
= (select count(distinct productid) from filter)
Я прошел через QA, и они выполнили одно и то же, но с приличным набором данных я бы предположил, что объединение будет работать лучше.