繁体   English   中英

SQL选择多对多关系

[英]SQL select many to many relationship

我有以下架构:

Users
-----
id
name

Conversations
-------------
id
other

Partecipants (join table)
------------
id
user_id
conversation_id
other

一个用户可以有很多对话,并且一个对话属于许多用户。

我需要选择一个用户与其他用户的子集的所有对话。

我的尝试是(不起作用):

SELECT     *
FROM       `conversations` 
INNER JOIN `participants` ON `conversations`.`id` = `participants`.`conversation_id` 
WHERE      `participants`.`user_id` = 1 
AND         (participants.user_id IN (4,6)) 
GROUP BY    participants.conversation_id 

任何想法?

嗯。 这是使用group byhaving

select p.conversation_id
from participants p
group by p.conversation_id
having sum(p.user_id = 1) > 0 and     -- user 1 in conversation
       sum(p.user_id in (4, 6)) > 0;   -- user 4 and/or 6 in conversation

从您的问题中我了解到的是,您希望看到与user_id = 1对话的用户“ 4,6”。为此,请尝试执行以下查询。

 select * from (SELECT     conversations.id as conversation_id, participants.user_id as selectedUser,   GROUP_CONCAT(participants.user_id) AS participants
 FROM       `conversations` 
 INNER JOIN `participants` ON `conversations`.`id` = `participants`.`conversation_id` 
GROUP BY    participants.conversation_id ) as derivedTable 
where 
selectedUser=1 and 
(participants like '%4%' and participants like '%6%')

在此处输入图片说明

以上查询的作用是。 最初,它将从对话和参与者表中获取所有记录,并再次将所有参与者连接到user_id = 1。 然后外部查询检查很清楚地找到了user_id,参与者有4和6。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM