MySQL 仅在值存在时才加入一列

标签 mysql

我的查询中有一堆表连接,如下所示:

SELECT a.id, a.firstnames, a.surname,b.subject_grade_id
FROM students a
LEFT JOIN student_subject b ON a.id=b.studentid
LEFT JOIN subject_grade c on b.subject_grade_id=c.id
WHERE b.subject_grade_id=?
ORDER by a.surname ASC

这给了我这样的结果:

id   firstnames   surname   subject_grade_id
--------------------------------------------- 
8      John        Doe           17
9      Bob         Mitchell      17
10     Mary        Smith         17

现在,我还有一个 marks 表,我想将其加入到我的查询中。假设该表是否只有一个这样的值:

id   term     studentid  subjectid   mark
--------------------------------------------- 
 1     2         8           17        25

我的预期输出是这样的:

id   firstnames   surname   subject_grade_id    mark
----------------------------------------------------- 
8      John        Doe           17              25
9      Bob         Mitchell      17              null
10     Mary        Smith         17              null

我怎样才能做到这一点?

我试过这个:

select a.id, a.firstnames, a.surname,b.subject_grade_id,d.mark
from students a
left join student_subject b ON a.id=b.studentid
left join subject_grade c on b.subject_grade_id=c.id
outer join marks d on d.subjectid=b.subject_grade_id
WHERE b.subject_grade_id=17
ORDER by a.surname ASC

但它给了我这样的结果:

id   firstnames   surname   subject_grade_id    mark
--------------------------------------------------------
8      John        Doe           17              25
9      Bob         Mitchell      17              25
10      Mary        Smith         17              25

我做错了什么?

最佳答案

不要OUTER JOIN 您的marks 表,LEFT JOIN 它。 LEFT JOIN 的目的是在不满足 ON 条件时保留连接右侧的行,并将 NULL 值替换为联接左侧的值。

关于MySQL 仅在值存在时才加入一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439377/

相关文章:

mysql - 使用继承会提高类似查询的速度和可维护性吗?

mysql - 有人知道一个不错的免费数据库模式逆向工程工具吗?

这个简单的表需要MySql、引擎内存、索引吗?

mysql - rails : mysql load error when starting rails server

mysql - Bookshelf.js 使用 rand() 随机排序项目

php - 通过 mysql php 从数据库订单中选择

sql - 根据最大值连接表

php - 获取从当前行到下一行mysql的datetime花费的时间

php - 在 PHP、MySQL 中,如何使用 HTML 表单更新表格中的一行

php - 什么更快?带有通配符和 OR 的 SQL 查询,或带有用于过滤的 php 循环的 catch-all 查询?