Предположим, что у нас есть стандарт, который принадлежит многим ассоциациям между продуктами и категориями. Таблица product_categories состоит из пар product_id и category_id.
У нас есть список category_id, и нам нужно выбрать все товары, которые принадлежат всем этим категориям..
Лучший подход, который мне пришёл в голову, это иметь несколько EXISTS () в выражении where, соединенном AND на уровне языка программирования:
SELECT * FROM products p WHERE
EXISTS(SELECT * FROM product_categories pc
WHERE pc.product_id = p.id AND pc.category_id = {first_id}) AND
EXISTS(SELECT * FROM product_categories pc
WHERE pc.product_id = p.id AND pc.category_id = {second_id}) AND ...
EXISTS работает быстро в Postgres 8.4, поэтому при таком подходе проблем с производительностью нет.
Но я думаю, есть ли более элегантный способ выполнения запросов такого типа?