如果查询为空或空,则mysql返回null

时间:2013-11-14 01:48:15

标签: mysql sql

我有这些表格:

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上有记录的数据

2 个答案:

答案 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'))

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