Один метод использует exists
:
select p.*
from posts p
where exists (select 1
from postcategory pc
where pc.post_id = p.id and pc.category = 10
) and
exists (select 1
from postcategory pc
where pc.post_id = p.id and pc.category = 11
) ;
Если вы просто хотели идентификаторы, я бы предложил агрегирование:
select pc.post_id
from postcategory pc
where pc.category in (10, 11)
group by pc.post_id
having count(*) = 2; -- use count(distinct category) if the table can have duplicates
Конечно, вы можете join
в posts
и используйте этот метод.