1

我有这些表:

学生记录

------------------------------
| 编号 | 学生姓名 |
| 1 | 切斯科|
| 2 | 洛伦兹 |
| 3 | 伯特 |
| 4 | 朱利叶斯 |
| 5 | dom |
------------------------------

学生出席

-------------------------------------------------- ---
| 编号 | 学生日期 | 时间_in | 超时
| 1 | 01-01-2013 | 上午 7:00 | 下午 12:00
| 1 | 01-02-2013 | 上午 8:00 | 下午 12:00
| 3 | 02-14-2013 | 上午 9:00 | 下午 12:00
---------------------------------------------- --------

如果我运行这个查询

select * from student_attendance 
where id in('4','5') 
and date in ('01-01-2013','01-02-2013')

如果不存在记录但将 id 和日期与查询中的内容相同,我如何使 time_in 和 time_out 为空?

还是我的查询不正确?

我已经坚持了 3 天了

任何帮助将不胜感激。谢谢

更新

我已经想到了这个

SELECT * FROM (select student_name, case when sa.time_in is null then '' else sa.time_in END as time_in, case when sa.time_out is null then '' else sa.time_out END as time_out, case when sa.student_date is null然后 '01-01-2013' else sa.student_date END as date from student_records sr left join student_attendance sa on sa.id = sr.id) as sub where date = '01-01-2013'

但现在它不显示在 student_records 上有记录的数据

4

2 回答 2

0

我不太确定你想返回什么,我也没有真正看到这会有用的情况,但也许联合会有所帮助:

select * from student_attendance 
where id in('4','5') 
and date in ('01-01-2013','01-02-2013')

UNION

select 4, '01-01-2013', NULL, NULL
where not exists (
    select * from student_attendance 
    where id in('4','5') 
    and date in ('01-01-2013','01-02-2013'))

显然,我重复这个查询,并且只给你第一个组合。(我不确定您是否想要所有这些,其中之一,等等)。所以这是一个非常糟糕的方法,但希望对你来说是一个起点。

于 2013-11-14T02:11:56.930 回答
0

如果不满足连接条件,则连接from将返回空值: student_records

SELECT * FROM student_records SR
LEFT JOIN student_attendance SA ON SA.id = SR.id
where SR.id in('4','5') 
and SA.student_date in ('01-01-2013','01-02-2013')

我建议您也将主键放在您的student_attendance表上,并注意student_records当它加入多个记录时信息可能会重复student_attendance,因此请为此做好准备。

用 SQL 小提琴更新:http ://sqlfiddle.com/#!2/a6b13d/2

于 2013-11-14T01:59:22.673 回答