我有一个名为参与者的表,其中包含以下字段:
- ID
- 用户身份
- 对话ID
背景是至少有两个或更多参与者的对话。我想查找仅由两个指定用户进行的对话,对话中没有其他用户。
我想出了以下几点:
SELECT *
FROM participants
WHERE user_id = 1 OR user_id = 2
GROUP BY conversation_id
HAVING COUNT(*) = 1
鉴于此内容
您可以看到用户 1 和 2 与用户 3 共享一个对话(对话 1),但也有一个单独的对话(对话 2)。
上面的查询实际上返回了正确的conversation_id(即2)-但我不确定查询是否正确。当我说它HAVING COUNT(*) = 2
返回对话 1 时,我不知道为什么。直觉上,我使用了 count - 如果设置为 1,它似乎可以工作 - 但我不确定它在这种情况下会做什么。
查询是否正确?如果是这样,为什么?如果没有,我需要更改什么才能使其正常工作?