【发布时间】:2010-08-11 10:29:58
【问题描述】:
假设我们有一个标准拥有并属于产品和类别之间的许多关联 product_categories 表由 product_id 和 category_id 对组成。
我们有 category_id 的列表,需要选择属于所有这些类别的所有产品。
我想到的最佳方法是在编程语言级别由 AND 连接的 where 子句中有多个 EXISTS():
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 中速度很快,因此这种方法没有性能问题。
但我不知道做这种类型的查询还有什么更优雅的吗?
【问题讨论】:
标签: sql performance optimization postgresql