簡體   English   中英

匹配表中同一列的多行-MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM