过滤多对多关系

Filtering in Many-to-many relationship

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

之间的关系

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

示例:

Student Course
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

中实现类似的东西

您可以尝试自助加入

查询 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'

Results:

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

你可以试试这个:

SELECT Course
FROM mytable
WHERE Student IN (SELECT Student FROM mytable WHERE Course='C2')
GROUP BY Course;

或者如果你想排除输入:

SELECT Course
FROM mytable
WHERE Student IN (SELECT Student FROM mytable WHERE Course='C2')
AND Course != 'C2'
GROUP BY Course;

或多个输入:

SELECT Course
FROM mytable
WHERE Student IN (SELECT Student FROM mytable WHERE Course IN ('C2','C3'))
#AND Course NOT IN ('C2','C3')
GROUP BY Course;