簡體   English   中英

mysql中的可選where子句條件

[英]optional where clause condition in mysql

我正在一個項目中,根據選擇的日期和從下拉列表中選擇的老師加載學生列表。列表中包含那些由班級老師選擇的學生數據。 現在我正在使用以下查詢:

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,則由於未標記出勤這個日期,則找不到任何記錄,但是我希望始終顯示學生列表,並且出勤率是標記為該日期,則應相應顯示,否則這些字段為空白

在此處輸入圖片說明

上面的屏幕截圖顯示了我想要的列表。如果未標記出該日期的出勤率,則AM字段應為空白,如果被標記,則其中應包含相應的出勤率

將您的AND a.attdate = '2014-04-11'到加入的ON()子句中,因此,如果不存在日期,它仍將返回s.classcode = '10002'的記錄,並且a.attdate列的結果為null設置,其中將過濾器應用於整個結果集,其中在tblattendance使用附加條件將過濾來自右表的記錄,即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' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM