如何联接2个表并显示所有第一个表,甚至第二个表的where子句未满足?

黑暗网络

我想简单的上学/出席,想法是老师应该每天确定学生的出席状态。

我有2张桌子,学生和在场

这是学生桌

在此处输入图片说明

这是在场表

在此处输入图片说明

现在,我想在我的网站中创建一个界面,该界面按class_name和date_presence显示所有学生。

如果班级和当前日期的所有学生都没有在场状态,则显示所有在场状态的学生“尚未决定”

如果某个班级和当前日期的学生没有在场状态,则它将为已经设置在场状态的学生显示学生在场状态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'

这是结果

在此处输入图片说明

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

我该怎么做?

提前致谢。

塞巴斯蒂安·布罗施(Sebastian Brosch)

您需要将以下条件移至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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从第一个表和第二个表中检索所有数据

如何在Django ORM中联接两个表而第一个表中没有任何列引用第二个表

2个表的SQL查询如何填充第一个到第二个表的字段

在第二个表上具有WHERE子句的LEFT OUTER JOIN,不影响第一个表

我如何内部联接2个SQL表,但仅从第二个表中获取第一个结果?

SwiftUI:如何在关闭第一个工作表时显示第二个工作表

如何加入两个表并使用第二个表覆盖第一个表?

2个表在联接时具有相同的字段名称,返回第二个字段,而第一个忽略

MySQL-WHERE子句中的NOT IN查询具有与第一个表相同的结构,但不适用于第二个表

如何在第一个表的列中指定的日期之前实现连接以获取第二个表中所有记录的计数

MySQL SELECT全部来自第一个表,并使用第二个表过滤器的特定where子句连接来自第二个表的匹配数据

在表单中,选择第二个表和第一个表

返回第一个表中的所有数据,如果存在,则仅返回第二个表中的1个数据

如何通过第一个表值获取第二个表值

如何合并多个表?(第一个是本月的数据,第二个是之前的所有其他数据)

联接两个表,根据第二个表中的多个条件对第一个表进行计数

内部联接两个表,并为第二个表的第一个表中的每个条目返回最大值

显示三个表的所有记录,即使第一个表中的记录不在第二个或第三个表中

从第二个表中选择所有数据,第二个表中的名称等于第一个表中的列值

当只有第一个表的键可用时,sql从第二个表获取所有条目

Oracle:匹配第一个和第二个表的行

查询第二个表的第一个值

MYSQL SELECT:如何获取一个额外的列,该列指示是否满足WHERE子句中的第一个或第二个条件?

选择第一个表中与第二个表中的每个记录匹配的所有记录

当第二个表中的布尔值为TRUE时,用第一个表覆盖第二个表的结果

SQL Join:如何显示第一个表数据,即使是第二个表条件为假

如何通过单击第一个操作表中的按钮来显示第二个操作表,Swift

同一工作表中的相同 VBA 代码用于 2 组不同的表,第一个有效,第二个无效

如果第一个表中还有其他数据,如何从第二个表中获取单个值?