我正在进行查询,并希望包含属于所有过滤器的所有产品。我有过滤ID,例如23,11,82。这基本上是类别ID。我想搜索属于类别23,11和82的所有产品。例如如果23表示儿童,11表示蓝色,82表示中等,我想搜索所有蓝色儿童产品的大小适中。
我只能想到使用IN(23,11,82),但卡住了,因为这将包括每个类别中的所有产品。那么有没有办法改变IN()函数来实现这个目标呢?
所以它基本上是WHERE categories_id = 23 AND categories_id = 11 AND categories_id = 82
而不是IN,即WHERE categories_id = 23 OR categories_id = 11 OR categories_id = 82
答案 0 :(得分:4)
您可以使用group by
和having
:
select productid
from t
where category in (23, 11, 83)
group by productid
having count(distinct category) = 3;
答案 1 :(得分:0)
在这种情况下,我会使用EXISTS
。虽然它有总是需要三个过滤器的限制。
select productid
FROM t
WHERE EXISTS (SELECT ''
FROM f1
WHERE t.productid = f1.productid
AND f1.category = 23)
AND EXISTS (SELECT ''
FROM f2
WHERE t.productid = f2.productid
AND f2.category = 11)
EXISTS (SELECT ''
FROM f3
WHERE t.productid = f3.productid
AND f3.category = 83)