2015-04-01 81 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;