Mysql 在多对多关系中过滤

Mysql 在多对多关系中过滤,mysql,many-to-many,Mysql,Many To Many,为了方便起见,我举了一个流行的例子: 假设我们有一份学生名单和一份课程名单。他们之间有一种多对多的关系。我可以使用中间表来定义2之间的关系 我需要的帮助是: 我想提供一个课程名称作为输入,并指出学习“输入”课程的学生正在学习其他课程 例如: 学生 课程 S1 C1 S1 C2 S2 C1 S3 C2 S3 C3 S4 C2 S5 C6 S5 C2 您可以尝试进行自连接 查询1: SELECT DISTINCT t2.Course FROM ( SELECT Student F

为了方便起见,我举了一个流行的例子: 假设我们有一份学生名单和一份课程名单。他们之间有一种多对多的关系。我可以使用中间表来定义2之间的关系

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

例如:

学生 课程 S1 C1 S1 C2 S2 C1 S3 C2 S3 C3 S4 C2 S5 C6 S5 C2
您可以尝试进行自连接

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

您可以尝试进行自连接

查询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 |
您可以尝试以下方法:

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;
您可以尝试以下方法:

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;

子查询是多余的<代码>选择不同的t2.课程从t1内部使用(学生)连接t2,其中t1.课程='C2'和t2.课程'C2'。子查询多余<代码>选择不同的t2.课程从t1内部使用(学生)连接t2,其中t1.课程='C2'和t2.课程'C2'。