mysql - SQL按最大列排序和内连接多个表
问题描述
我有 2 张桌子
Papers
|ID | Paper_Code | Subject_Code |
| 0 | 2018/Eng/01| ENG |
| 1 | 2018/Eng/02| ENG |
| 2 | 2018/CS/01 | CS |
| 3 | 2018/Sci/01| Sci |
| 4 | 2018/Eng/03| ENG |
Subjects
|Subject_Code|Subject_Name|
|ENG |English |
|Sci |Science |
|CS |Computers |
我通过使用这个 SQL CODE 实现了下表,它只显示了每个不同 Subject_Code 的 Max Paper_Code,这正是我想要的。
$sql = "SELECT Paper_Code FROM papers
WHERE(Subject_Code,Paper_Code)
IN(SELECT Subject_Code,MAX(Paper_Code)
FROM Papers GROUP BY Subject_Code)
";
|ID | Paper_Code | Subject_Code |
| 4 | 2018/Eng/03| ENG |
| 2 | 2018/CS/01 | CS |
| 3 | 2018/Sci/01| Sci |
Now I want to INNER JOIN The Subjects Table to give me results like this
|ID | Paper_Code | Subject_Code | Subject_Name |
| 4 | 2018/Eng/03| ENG | English |
| 2 | 2018/CS/01 | CS | Computers |
| 3 | 2018/Sci/01| Sci | Science |
我试过这个但失败了
$sql = "SELECT Paper_Code FROM Papers
WHERE(Subject_Code,Paper_Code)
IN(SELECT Subject_Code,MAX(Paper_Code)
FROM Papers GROUP BY Subject_Code)
INNER JOIN Subjects
ON Papers.Subject_Code = Subjects.Subject_Code";
解决方案
JOIN
之前WHERE
:
编辑:正如 Barmar 的评论所说,限定所有列:
SELECT p.Paper_Code
FROM Papers p
INNER JOIN Subjects s
ON p.Subject_Code = s.Subject_Code
WHERE (p.Subject_Code, p.Paper_Code)
IN (SELECT p2.Subject_Code, MAX(p2.Paper_Code)
FROM Papers p2
GROUP BY p2.Subject_Code)
推荐阅读
- c++ - 使用数据库跟踪元素出现的最佳方法
- html - 如何为三角形正确添加框阴影?
- javascript - 使用 Datejs 将日期格式化为 UTC 日期
- sql - 当我们将 () 括号添加到 SQL Server 中的列值时,排序顺序发生了变化
- azure-devops - 在管道构建期间获取 sql server (express) azure devops
- visual-studio - MT 和 MD 代表什么?
- json - 在 MariaDB 中使用 JSON_QUERY 获取对象 JSON 数组
- sql - 从帮助程序类调用存储过程时如何禁用 AmbientTransaction?
- c# - 找到最大的平方子矩阵
- python - 模拟输出的数字触发器