回答

收藏

sql消息表查询

技术问答 技术问答 266 人阅读 | 0 人回复 | 2023-09-12

这是我的对话表:. B- r1 e. E. `4 e8 q/ o# Y
conversationID  ||  userID                                                                                                                                                                                      ||    1                                                                                                                                                                                      ||    2    2   2                                                                                                                                                                                                                               2                                                                                                                                                                                                                                                                            ||     1     2                               ||    2    2   2                                                                                                                                                                                                                               2                                                                                                                                                                                                                                                                            ||    3如你所见,每个会话可以包含两个或两个以上的用户。9 Z: d* N$ N' z# n- w/ P
我试图获得只有两个用户的对话ID。也就是说,只有用户1和2的对话,答案是对话1。
: }5 o# o( a  n, w9 B但是我怎么得到呢?0 s0 Z3 ~0 O9 B) Y# F3 ^8 I4 D
                                                                , P, z' ~& M. F  i  g9 @
    解决方案:                                                               
; j! n0 A; y4 J) ]% a" c. I                                                                这将选择所有用户1或用户2或同时有两个用户但没有其他用户的对话:) L3 X4 m( d* B  ?" q* u
select conversationIDfrom conversationsgroup by conversationIDhaving count(*) = count(case when userID in (1,2) then 1 end)如果您还希望所有会话都具有完全相同的用户1和2,而没有其他用户,则还必须添加和条件:8 I5 w9 U; }. N+ k
select conversationIDfrom conversationsgroup by conversationIDhaving count(*) = count(case when userID in (1,2) then 1 end)       and count(*) = 2 -- number of elements in set若可复制userID,则最好使用distinct:
: c9 W% L! p) z4 A1 R: L- K, ?+ c4 Aselect conversationIDfrom conversationsgroup by conversationIDhaving  count(distinct userID) = count(distinct case when userID in (1,2) then userID end)  and count(distinct userID) = 2 -- number of elements in set
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则