2017-05-17 100 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