首页 文章

MySQL查询找到一个稍微复杂的关系

提问于
浏览
0

我试图设计一个MySQL查询来根据2个参数选择一个特定的记录 . 可以说我有3张 table . 用户,对话和UserConvo,其中UserConvo是一个引用表,用于链接用户和他们拥有的任何对话之间的多对多关系 . 把它想象成一个非常基本的网络聊天 .

现在,如果给定任意数量的UserIds(即[1,2,3]),我想找到一个完全涉及这些用户的对话 . 因此,对于UserIds 1,2和3的情况,我想看看是否存在仅包含用户1,2和3的对话 .

是否有纯粹的MySQL方法来做到这一点?我的第一个想法是只查询UserId 1,2和3所在的对话 . 然后,以某种方式检查每条记录以查看是否所有ConversationId都匹配,但我没有大量的MySQL经验,也不确定它的潜力 .

谢谢

1 回答

  • 1

    这样的事情应该有效 . 它使用 countcase - 这个想法是将每个对话的总计数与用户在(1,2,3)中的ID进行比较:

    select c.id
    from conversations c
      join userconversations uc on c.id = uc.conversationid
      join users u on uc.userid  = u.id
    group by c.id
    having count(u.id) = count(case when u.id in (1,2,3) then 1 end)
    

相关问题