我正在尝试设计MySQL查询以根据2个参数选择特定记录。可以说我有3张桌子。用户,对话和UserConvo,其中UserConvo是一个引用表,用于链接用户与他们所拥有的任何对话之间的多对多关系。把它想象成一个非常基本的网络聊天。
现在,如果给定任意数量的UserIds(即[1,2,3]),我想找到一个完全涉及这些用户的对话。因此,对于UserIds 1,2和3的情况,我想看看是否存在仅包含用户1,2和3的对话。
有没有纯粹的MySQL方法来做到这一点?我的第一个想法是只查询UserId 1,2和3所在的对话。然后,以某种方式检查每条记录,看看是否所有的ConversationId都匹配,但我没有太多的MySQL经验,也不确定它的潜力。
由于
答案 0 :(得分:1)
这样的事情应该有效。它使用count
和case
- 我的想法是将每次会话的总计数与用户在(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)