我有这些表格:
student_records
------------------------------
| id | student_name |
| 1 | chesco |
| 2 |洛伦兹|
| 3 | bert |
| 4 | julius |
| 5 | dom |
------------------------------
student_attendance
-------------------------------------------------- ---
| id | student_date | time_in | time_out
| 1 | 01-01-2013 |早上7点|中午12点
| 1 | 01-02-2013 |上午8:00 |中午12点
| 3 | 02-14-2013 |上午9:00 |中午12点
-------------------------------------------------- ---
如果我运行此查询
select * from student_attendance
where id in('4','5')
and date in ('01-01-2013','01-02-2013')
如果没有记录但是id和date与查询中的内容相同,我怎么能使time_in和time_out为null?
或我的查询不正确?
我已经坚持了3天
任何帮助将不胜感激。感谢
更新
我已经达到了这个目标
SELECT * FROM(选择student_name, 当sa.time_in为null然后''else sa.time_in END为time_in时, 当sa.time_out为null然后''else sa.time_out END为time_out时, sa.student_date为null然后'01 -01-2013'时的情况,否则sa.student_date END为日期 来自student_records sr left加入student_attendance sa 在sa.id = sr.id)as sub where date = '01 -01-2013'
但现在它没有显示在student_records上有记录的数据
答案 0 :(得分:0)
如果未满足加入条件,则来自 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
中的多个记录时,{{1}}信息可能会重复,所以为此做好准备。
更新了SQL小提琴:http://sqlfiddle.com/#!2/a6b13d/2
答案 1 :(得分: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'))
显然,我重复这个查询,只给你第一个组合。 (我不确定你是否想要所有这些,其中之一,等等)。所以这是一个非常糟糕的方法,但希望对你来说是一个跳跃点。