2017-05-17 97 views
0

的组合相关的选择标识码,我在那里我存储产品的参数,如一个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

GROUP BY ID,COUNT分组中的记录数量,并使用HAVING仅过滤那些计数与您正在查找的参数数量相匹配的记录。 – CBroe

回答

1

你可以做到这一点通过过滤行你想要的参数值,那么有多少每个产品计数,并使用HAVING子句只得到那些有三个(你的情况),其中:

select productId 
from yourTable 
where parameterValue in (1, 2, 3) 
group by productId 
having count(distinct parameterValue) = 3 
+1

@Tomage请注意,如果每个组合都是唯一的(因为它应该是),那么在这种情况下DISTINCT是多余的。 – Strawberry

+0

很好,谢谢大家! – Tomage

+0

关于冗余和DISTINCT ...如果使用或不使用,应该有任何明显的性能差异?既然它返回不同的值,开销应该非常小,对吧? – Tomage