mysql - SQL选择多对多关系

标签 mysql sql select join

我有以下架构:

Users
-----
id
name

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

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

一个用户可以有多个 session ,一个 session 属于多个用户。

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

我的尝试是(不工作):

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

关于mysql - SQL选择多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461728/

相关文章:

php - 操作 'like' 的排序规则 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 的非法混合

php - 如何从 laravel 5 中的两个相关表中获取数据

mysql - 这些索引之间的 SELECT 查询速度差异 : *UNIQUE(col1, col2)* 与 *FK(col1)、FK(col2)*

mysql - 获取一行中的预览下一条记录

html - 下拉列表中没有空白项的空白 HTML SELECT

MySQLWhere子句与2个LeftJoins一起使用(3个表)错误

mysql - 如何在 MySQL 中编写优化查询?

php - 从数据库中仅选择 8 行

mysql - 无法在mysql中执行准备好的语句

c - 当我从主集中删除 fds 时,为什么需要在 select 调用中更新 nfds?