MySQL 中的 LEFT JOIN 只保留第一行
在MySQL中,LEFT JOIN语句是常用的查询语句之一,可以把两个表格(A和B)的内容联结在一起,LEFT JOIN会保留第一个表格中的所有行,以及与之对应的另一个表格中的匹配行。但如果想保留第一个表格中匹配的第一行,而不是所有相关行,怎么办呢?本文将解决这个问题。
假设我们有两个表A和B,分别列出了学生和他们的主修课程:
表A:
学生ID | 姓名 |
---|---|
1 | Tom |
2 | Bob |
3 | Amy |
4 | Michael |
表B:
学生ID | 课程名 | 分数 |
---|---|---|
1 | Mathematics | 90 |
1 | Physics | 85 |
2 | Literature | 75 |
2 | History | 80 |
3 | Art | 95 |
4 | Biology | 70 |
如果我们想要联结两个表格,把每个学生的信息和他们所选的第一门课列在一起,可以使用以下代码:
SELECT A.学生ID, A.姓名, B.课程名, B.分数
FROM A
LEFT JOIN B ON A.学生ID = B.学生ID
GROUP BY A.学生ID;
以上代码会输出以下结果:
学生ID | 姓名 | 课程名 | 分数 |
---|---|---|---|
1 | Tom | Mathematics | 90 |
2 | Bob | Literature | 75 |
3 | Amy | Art | 95 |
4 | Michael | Biology | 70 |
但如果我们只想要每个学生的第一门课的信息,而不是所有相关课程的信息,可以使用以下代码:
SELECT A.学生ID, A.姓名, B.课程名, B.分数
FROM A
LEFT JOIN (SELECT 学生ID, 课程名, 分数
FROM B
GROUP BY 学生ID
ORDER BY 学生ID) AS B ON A.学生ID = B.学生ID;
以上代码会输出以下结果:
学生ID | 姓名 | 课程名 | 分数 |
---|---|---|---|
1 | Tom | Mathematics | 90 |
2 | Bob | Literature | 75 |
3 | Amy | Art | 95 |
4 | Michael | Biology | 70 |
阅读更多:MySQL 教程
总结
通过使用子查询和GROUP BY语句,可以在MySQL中使用LEFT JOIN语句只保留第一个表格中匹配的第一行。以上示例代码可以有效地应用于实际工作中,并提高查询效率。