我有一个MySQL表,我存储产品参数,如:
productId | parameterValue
--------------------------
1 | 1
1 | 2
1 | 3
2 | 1
3 | 3
我需要选择与parameterValues 1 AND 2 AND 3
相关联的不同productIds。所以我不能简单地使用WHERE parameterValue IN (1,2,3)
,因为它会返回与这些值相关联的productIds。
查询此问题最有效的方法是什么?该表有数十万行。
答案 0 :(得分:1)
您可以通过过滤所需参数值的行来计算,然后计算每个产品的数量,并使用HAVING
子句仅获取具有三个(在您的情况下)的产品:
select productId
from yourTable
where parameterValue in (1, 2, 3)
group by productId
having count(distinct parameterValue) = 3