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

dch*_*cke 2 mysql sql count having

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

  • ID
  • 用户身份
  • conversation_id

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

我想出了以下内容:

SELECT * 
FROM participants
WHERE user_id = 1 OR user_id = 2
GROUP BY conversation_id
HAVING COUNT(*) = 1
Run Code Online (Sandbox Code Playgroud)

鉴于此内容

参与者表格图像http://s12.postimage.org/af4xrfoax/table.png

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

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

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

jue*_*n d 8

由于该where子句过滤掉了user_ids,因此使用您的查询将不起作用.使用

SELECT * FROM participants
GROUP BY conversation_id
HAVING sum(user_id not in (1,2)) = 0
Run Code Online (Sandbox Code Playgroud)

user_id not in (1,2)返回1如果user_id除了1,2正在通话和0其他.所以使用SUM你可以加起来所有的情况.如果没有找到,则总和为0.