[英]Match Multiple rows of same columns in Table - MySql
我有一張桌子,如下。
+------------+-------------+---------+
| productid | attributeid | valueid |
+------------+-------------+---------+
| 1011052312 | 331100 | 1543697 |
| 1011052312 | 33113319 | 1534108 |
| 1011098009 | 33129 | 2655849 |
| 1011052380 | 331100 | 1543697 |
| 1011052380 | 33113319 | 1233908 |
+------------+-------------+---------+
現在,我只需要獲取那些具有非常好的一組屬性值對的productid
。 例如,我需要獲取一個產品,該產品的屬性331100
具有值1543697
,屬性33113319
具有值1534108
。 產品1011052312
滿足此條件。
需要注意的一件事是,我應該避免多個聯接,因為可能會有一長串需要匹配的屬性。 對於每個屬性,可以有任意數量的可能值。
這是一個常見的問題,選擇與至少一個屬性匹配的所有產品,將它們分組,計算每個產品具有多少個屬性,然后使用HAVING
子句僅選擇具有所有屬性的產品。 像這樣:
SELECT productid
FROM table
WHERE (attributeid=331100 and valueid=1543697)
OR (attributeid=33113319 and valueid=1534108)
GROUP BY productid
HAVING COUNT(*) = 2
說同一件事的另一種方式-我不記得EXPLAIN是否相同,所以這可能會更慢...
SELECT productid
FROM my_table
WHERE (attributeid,valueid) IN ((331100,1543697)
,(33113319,1534108)
)
GROUP
BY productid
HAVING COUNT(*) = 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.