2016-06-01 23 views
1

可以說我有標識和標籤只選擇與匹配的數組正好

id | tags  
1 | apples 
1 | pears 
2 | apples 
2 | pears 
2 | oranges 
3 | apples 
3 | pears 
3 | oranges 
3 | lemons 

我要查詢的表只對有標籤的ID標籤(「蘋果」,「梨」的ID,橘子)。 因此,在這種情況下所需的輸出僅僅是ID爲2

閱讀其他類似的帖子後,我曾嘗試在mysql中下面的查詢語句:

SELECT 
    id 
FROM table 
WHERE tags IN ('apples', 'pears', 'oranges') 
GROUP BY id 
HAVING COUNT(DISTINCT tags)=3; 

但這同時返回ID 2 & 3,和我只想要id 2在我的情況下。

回答

2

HAVING子句中使用CASE表達:

SELECT id 
FROM t 
GROUP BY id 
HAVING 
    COUNT(DISTINCT CASE WHEN tags IN('apples', 'pears', 'oranges') THEN tags END)=3 
    AND COUNT(DISTINCT CASE WHEN tags NOT IN('apples', 'pears', 'oranges') THEN tags END) = 0; 

ONLINE DEMO

+0

我認爲'MySQL'可以寫成 - >'HAVING COUNT(標籤(...)= 3 ..''不需要'CASE',但是+1 – sagi

+0

如果一個id有兩個蘋果,一個梨子和一個桔子,這個工作是否會起作用? – jarlh

+0

@jarlh,在這種情況下,我們需要添加'DISTINCT'。 –