与IN()相反,即AND不是OR

时间:2016-05-08 19:09:06

标签: sql

我正在进行查询,并希望包含属于所有过滤器的所有产品。我有过滤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

2 个答案:

答案 0 :(得分:4)

您可以使用group byhaving

执行此操作
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)