![](/img/trans.png)
[英]How to format query with multiple optional AND condition in WHERE clause
[英]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.