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语句只保留第一个表格中匹配的第一行。以上示例代码可以有效地应用于实际工作中,并提高查询效率。
极客笔记