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

时间:2014-05-13 03:24:20

标签: mysql

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

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

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

由于

1 个答案:

答案 0 :(得分: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)