仅选择具有与数组完全匹配的标记的ID

时间:2016-06-01 06:18:25

标签: mysql sql

假设我有一张ids和标签表

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

我想只查询带有标签的ids('apples','pears',oranges')。 因此,在这种情况下,所需的输出仅为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。

1 个答案:

答案 0 :(得分:2)

CASE子句中使用HAVING表达式:

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