You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确编写SQL查询判断两个用户间是否存在双人非群组聊天

问题根因

你的查询逻辑错误出在WHERE子句提前过滤了所有非3、非18的参与者记录:
针对包含3、18、17的三人群聊,WHERE participants.user = 3 or participants.user = 18会先把用户17的参与记录筛掉,后续分组统计时只会统计到剩余的2条记录,自然会得到成员数为2的错误结果,无法识别出群聊还有其他参与者。

正确查询逻辑

要判断是否存在两人非群聊会话,需要同时满足两个条件:

  • 会话同时包含用户3和18
  • 会话的总参与人数刚好为2

你可以用一次分组查询实现:

SELECT conversation
FROM Participants
GROUP BY conversation
HAVING 
  -- 校验会话中包含3和18两个目标用户
  SUM(CASE WHEN user IN (3,18) THEN 1 ELSE 0 END) = 2
  -- 校验会话总参与人数刚好为2,排除存在其他参与者的群聊
  AND COUNT(DISTINCT user) = 2

如果查询返回结果不为空,就说明两个用户存在非群聊会话。

也可以用子查询的写法实现相同逻辑:

SELECT p.conversation
FROM Participants p
WHERE p.conversation IN (
    SELECT conversation FROM Participants 
    WHERE user IN (3,18)
    GROUP BY conversation
    HAVING COUNT(DISTINCT user) = 2
)
GROUP BY p.conversation
HAVING COUNT(DISTINCT user) = 2

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:57:02