2015-07-11 58 views
0

我有一个DB这样的:MySQL的 - 如果选择匹配多个值

TagSetMap 
id | setId | tagId 
------------------ 
1 | 1 | 1 
2 | 2 | 2 
3 | 3 | 1 
4 | 3 | 2 

我要检索的SETID如果标签识别匹配1和2,我已经能够用做:

SELECT TagSetMap.SetId From TagSetMap 
WHERE TagSetMap.TagId IN (1, 2) 
GROUP BY TagSetMap.SetId HAVING COUNT(*) = 2 

但是,如果我想要得到这样的标签识别= 1这个查询不起作用,因为它会给我带回两个SETID = 1和SETID = 3,甚至用下面的查询:

SELECT TagSetMap.SetId From TagSetMap 
WHERE TagSetMap.TagId IN (1) 
GROUP BY TagSetMap.SetId HAVING COUNT(*) = 1 

有没有办法修改查询,以便它只给我明确匹配我的目标集(而不是超集)的结果?

谢谢!

+0

组由两列问题 – twentylemon

+0

可怕的字眼你能写出来的SQL查询,你试过吗?如果格式很好,可能会更容易理解。 – Drew

+0

@CPL – Breedly

回答

0
select setId 
from your_table 
where tagId in (1,2) 
group by setId 
having sum(tagId = 1) > 0 
or count(distinct tagId) = 2