这是我的对话表:. 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