我有两个表,第一个是products表,它有2列:id和product_name。 第二个表是filters表,它有2列:filter_id,product_id。
例如我在产品表中有这个:
id | product_name
1 | test product
,这在过滤表中:
filter_id | product_id
1 | 1
2 | 1
3 | 1
如您所见,ID' 1'有3个过滤器。
我的目标是通过过滤器获取产品。 例如,我需要产品具有2和3 filter_id的每个产品。我试着用这样的东西:
SELECT * FROM products p LEFT JOIN filters f ON (p.id = f.product_id) WHERE (filter_id = '2' AND filter_id = '3')
我无法做到这一点,因为filter_id不能同时等于2和3。 主要问题是我应该只使用一个查询来获取产品。
答案 0 :(得分:3)
按产品分组,只选择具有filter_ids的那些
SELECT p.id, p.product_name
FROM products p
JOIN filters f ON p.id = f.product_id
WHERE f.filter_id in (2,3)
group by p.id, p.product_name
having count(distinct f.filter_id) = 2