mysql - 过滤多对多关系
问题描述
为了方便起见,我在这里举一个流行的例子:假设我们有一个学生列表和一个课程列表。它们之间存在多对多的关系。我可以使用中间表来定义 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 中实现类似这样的概念或代码
解决方案
您可以尝试自行加入
查询 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 |
推荐阅读
- mongodb - MongoDB 替换所有匹配的文档
- mongodb - 数组子文档中的某些值需要是唯一的
- matlab - 在具有给定协方差矩阵的二维正态分布上生成数字
- spring - 为什么测试类没有使用 spring boot 2.5.5 设置 ActiveProfiles?
- agda - 为什么 Agda 在这里需要模式匹配
- ios - AVVideoCompositionCoreAnimationTool 在使用 AVAssetExportSession 导出期间没有为自定义属性设置动画
- arrays - 更改 Mui-datatable 的数据时收到错误:对象作为 React 子项无效(找到:带有键 {} 的对象)。如果你打算渲染一个
- github - 我可以使用 Github Actions 在同一组织的仓库中更新另一个提交的仓库吗?或者在 GH Pages 中显示内容而不提交它们?
- docker - 在远程 Docker 容器中开发时使用本地 Clang 格式
- git - Git:在以前的提交中删除旧模式 100644 新模式 100755