首页 > 解决方案 > 过滤多对多关系

问题描述

为了方便起见,我在这里举一个流行的例子:假设我们有一个学生列表和一个课程列表。它们之间存在多对多的关系。我可以使用中间表来定义 2 之间的关系。

我需要帮助的是:我想提供一个课程名称作为输入,并找出正在学习“输入”课程的学生正在学习其他课程。

例子:

学生 课程
S1 C1
S1 C2
S2 C1
S3 C2
S3 C3
S4 C2
S5 C6
S5 C2

输入:C2 所以 S1、S3、S4、S5 正在研究 C2。我想知道他们还在学习什么其他课程。输出:C1、C3、C6

我正在寻找在 mySQL 中实现类似这样的概念或代码

标签: mysqlmany-to-many

解决方案


您可以尝试自行加入

查询 1

SELECT DISTINCT t2.Course 
FROM (
    SELECT Student 
    FROM T t1  
    WHERE Course = 'C2'
) t1 
INNER JOIN T t2 ON t1.Student = t2.Student 
WHERE t2.Course <> 'C2'

结果

| Course |
|--------|
|     C1 |
|     C3 |
|     C6 |

推荐阅读