我有一个像这样的数据库:
TagSetMap
id | setId | tagId
------------------
1 | 1 | 1
2 | 2 | 2
3 | 3 | 1
4 | 3 | 2
如果 tagId 匹配 1 和 2,我想检索 setId,我已经能够做到这一点:
SELECT TagSetMap.SetId From TagSetMap
WHERE TagSetMap.TagId IN (1, 2)
GROUP BY TagSetMap.SetId HAVING COUNT(*) = 2
但是,如果我尝试获取类似 tagID = 1 的内容,此查询将不起作用,因为即使使用以下查询,它也会返回 SetId = 1 和 SetId = 3:
SELECT TagSetMap.SetId From TagSetMap
WHERE TagSetMap.TagId IN (1)
GROUP BY TagSetMap.SetId HAVING COUNT(*) = 1
有没有办法修改查询,以便它只提供与我的目标集(而不是超集)明确匹配的结果?
谢谢!
最佳答案
select setId
from your_table
where tagId in (1,2)
group by setId
having sum(tagId = 1) > 0
or count(distinct tagId) = 2
关于MySql - 选择是否匹配多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361383/