假设我有一张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。
答案 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;