mysql - 如何连接 2 个表并显示所有第一个表甚至第二个表的 where 子句不满足?

标签 mysql

<分区>

我想做一个简单的学校出勤/出勤,想法是老师应该每天决定学生的出勤状态。

我有 2 个表,student 和 presence

这是学生表

enter image description here

这是存在表

enter image description here

现在我想在我的网站上制作界面,按类(class)名称和日期显示所有学生。

如果类(class)和当前日期的所有学生都没有出席状态,则显示所有出席状态为“尚未决定”的学生

如果类(class)和当前日期的一些学生没有出席状态,则它显示学生出席状态 A/I/S 已经设置出席状态的学生,而另一个学生为“尚未决定”

这是我的问题

SELECT `a`.`student_id`, `a`.`student_name`, `b`.`presence_id`, `b`.`presence_status`, `b`.`date_presence` 
FROM `student` `a` 
left JOIN `presence` `b` ON `a`.`student_id` = `b`.`student_id` 
WHERE `a`.`class_name` = 'KLJ0009' and `b`.`date_presence` = '2018-07-24'

这是结果

enter image description here

它只显示 3 个人,我想要的是显示所有学生,其 class_name 是 KLJ0009,如果学生没有 presence_status,则将 presence_id、presence_status 和 date_presence 显示为 null

我该怎么做?

提前致谢。

最佳答案

您需要将以下条件移动到查询的 ON 部分:

`b`.`date_presence` = '2018-07-24'

因此您的查询如下所示:

SELECT `a`.`student_id`, `a`.`student_name`, `b`.`presence_id`, `b`.`presence_status`, `b`.`date_presence` 
FROM `student` `a` LEFT JOIN `presence` `b` ON `a`.`student_id` = `b`.`student_id` AND `b`.`date_presence` = '2018-07-24'
WHERE `a`.`class_name` = 'KLJ0009'

注意:如果您想始终查询当前日期,可以使用 NOWCURDATE而不是 2018-07-24

demo: https://www.db-fiddle.com/f/762aXDfQConnR8XbwYQ3z4/0

关于mysql - 如何连接 2 个表并显示所有第一个表甚至第二个表的 where 子句不满足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51512152/

相关文章:

mysql - 如何使用 SELECT 查询从两个表输出结果 - 查询逻辑限制从一个表输出数据

mysql - 关闭从属服务器后出现percona复制错误

php - 外键约束失败

mysql - 如何选择其他列中不存在外键的位置并比较不直接链接的表中的日期

php - 插入值列表与列列表不匹配,语句和DB是否对应?

javascript - AngularJS、MySQL、PHP、JSON - 数据库中未显示的数据

mysql - 无法从数据库加载 URL

mysql - 查询mysql后使用if

php - Joomla 2.5 : Migration to new server, 但所有链接不断重定向回旧服务器

php - 如何获取过去 7 天的 MySQL 记录,但仅限有记录的日期,并返回每一天的记录?