mysql中的可选where子句条件

时间:2014-04-14 06:36:19

标签: c# mysql asp.net

我正在开展一个项目,根据所选日期和从下拉列表中选择的教师加载学生列表。该列表包含那些班级老师是教师选择的学生数据。现在我使用以下查询:

select s.studentcode,s.studentname,a.attdate,if(a.period='01' or 
a.period='AM',a.status,'') as attAM,if(a.period='PM',a.status,'') as attPM 
from tblstudent s left join tblattendance a on s.studentcode=a.studentcode 
where s.classcode='10002' and a.attdate='2014-04-11'

现在上面问题的问题是,如果我选择了像2014-04-15这样的日期,那么由于没有为此日期标记出勤率,那么找不到记录,但我希望学生列表始终显示,如果出勤被标记为该日期,则应相应地显示,否则这些字段将为空白

enter image description here

上面的屏幕截图显示了我想要的列表。如果该日期的出勤没有被标记,并且如果被标记它应该包含相应的出勤,那么字段AM应该是空白的

1 个答案:

答案 0 :(得分:1)

AND a.attdate = '2014-04-11'移动到join的ON()子句,如果日期不存在,它仍然会返回s.classcode = '10002'的记录,而a.attdate列在结果集中将为null,其中filter应用于整个结果集,其中在连接中使用附加条件将过滤右表中的记录,即tblattendance而不是整个结果集

SELECT 
  s.studentcode,
  s.studentname,
  a.attdate,
  IF(
    a.period = '01' 
    OR a.period = 'AM',
    a.status,
    ''
  ) AS attAM,
  IF(a.period = 'PM', a.status, '') AS attPM 
FROM
  tblstudent s 
  LEFT JOIN tblattendance a 
    ON (s.studentcode = a.studentcode AND a.attdate = '2014-04-11')
WHERE s.classcode = '10002' 
相关问题