Mysql - 查找仅由两个用户持有的对话

时间:2012-12-09 14:44:14

标签: mysql sql count having

我有一个名为参与者的表,其中包含以下字段:

      
  • ID
  •   
  • USER_ID
  •   
  • conversation_id

背景是至少有两个或更多参与者进行对话。我想找到一个仅由两个指定用户持有的对话,而对话中没有其他用户。

我想出了以下内容:

SELECT * 
FROM participants
WHERE user_id = 1 OR user_id = 2
GROUP BY conversation_id
HAVING COUNT(*) = 1

鉴于此内容

participant table image http://s12.postimage.org/af4xrfoax/table.png

您可以看到用户1和2与用户3(对话1)共享对话,但也只有一个对话(对话2)。

上面的查询实际上返回了正确的conversation_id(即2) - 但我不确定查询是否正确。当我说HAVING COUNT(*) = 2它返回会话1时,我不知道为什么。直觉上我使用了计数 - 如果设置为1似乎有效 - 但我不确定它在这种情况下的作用。

查询是否正确?如果是这样,为什么?如果没有,我需要更改什么才能使其正常工作?

2 个答案:

答案 0 :(得分:7)

使用您的查询将无效,因为where子句会过滤掉user_ids。使用

SELECT * FROM participants
GROUP BY conversation_id
HAVING sum(user_id not in (1,2)) = 0
如果user_id not in (1,2)不是1在对话中,则{p> user_id会返回1,2,否则会0。因此,使用SUM可以添加所有这些案例。如果没有找到,则总和为0

答案 1 :(得分:0)

select conversation_id
from participants
where user_id in (1,2)
group by conversation_id
having count(user_id) = 2

返回两个用户conversation_id