2015-04-01 65 views
0

我有一个这样的表我试图让chat_id成员excat匹配例如我想要获得成员1,2的聊天ID但是当它这样做Select * member_to_chat WHERE member_id IN (1,2)它返回结果和来自聊天编号3,这是错误的,因为在这个聊天中,我有3个人,我需要,如果我给member_id 1和2只得到chat_id 1,是否有可能这样做与MySQL,预先感谢您!如果不好,我很抱歉我的英语。Mysql查询,得到确切的价值

Member_to_chat

id | member_id | chat_id 
1  1   1 
2  2   1 
---------------------- 
3  1   2 
4  3   2 
---------------------- 
5  1   3 
6  2   3 
7  3   3 

给定member_id 1,2的结果 - chat_id必须是1,或者如果我通过1,2,3必须返回chat_id 3,再次感谢您对任何suggesstions

http://sqlfiddle.com/#!9/d7519/3

回答

0
select distinct chat_id 
from member_to_chat m 
where 
not exists (select chat_id 
     from member_to_chat 
     where member_id not in(1,2) 
     and chat_id=m.chat_id) 
and exists 
     (select chat_id 
     from member_to_chat 
     where member_id=1) 
and exists 
     (select chat_id 
     from member_to_chat 
     where member_id=2) 

SQLFIDDLE DEMO

+0

谢谢你的快速的答案,但,我只需要chat_id 1这个返回和3以及这个计数我不知道chat_id我怎么知道有多少人在聊天 – Alex 2015-04-01 11:26:12

+0

好的,回答编辑。 – jfun 2015-04-01 11:34:11

+0

它是去工作只与一个 '和存在 (选择chat_id 从member_to_chat 其中member_id IN(1,2))'或必须为每个成员 – Alex 2015-04-01 11:43:58

0

我喜欢用group byhaving来解决这些问题,因为这是一种测试许多条件的非常灵活的方法。如果你想有1和2的(但可能有3)任何聊天:

select chat_id 
from member_to_chat mtc 
group by chat_id 
having sum(member_id = 1) > 0 and 
     sum(member_id = 2) > 0; 

要获得唯一1和2 - 但没有其他人:

select chat_id 
from member_to_chat mtc 
group by chat_id 
having sum(member_id = 1) > 0 and 
     sum(member_id = 2) > 0 and 
     sum(member_id in (1, 2)) = 0;