过滤多对多关系
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'
| 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;
为了方便起见,我在这里举一个流行的例子: 假设我们有一个学生列表和一个课程列表。它们之间存在多对多的关系。我可以使用中间 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'
| 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;