2016-01-24 38 views
0

我有這個疑問行:mysql如何顯示,也不匹配where子句

SELECT `y78f2_students`.`firstname` , `y78f2_students`.`lastName` , `y78f2_students`.`student_id`,`y78f2_attendance`.`is_present`, `y78f2_attendance`.`note`, `y78f2_attendance`.`thedate` 
FROM `y78f2_students` 
INNER JOIN `y78f2_enrolls` ON `y78f2_enrolls`.`student_id` = `y78f2_students`.`student_id` 
INNER JOIN `y78f2_attendance` ON `y78f2_attendance`.`student_id` = `y78f2_students`.`student_id` 
WHERE `y78f2_enrolls`.`term` = 'Term 2 2016' 
AND `y78f2_enrolls`.`crn_class` = 'Math1R1' 
and `y78f2_attendance`.`thedate` = '2016-01-24' 
ORDER BY thedate desc 

此查詢僅返回其中的日期爲「2016年1月24日」的行。目前這只是一行:http://i.imgur.com/jRTBqQ0.png

我需要顯示所有行,其中term ='Term 2 2016'和crn_class` ='Math1R1'以及日期尚未設置的位置。換句話說,我想向班上的所有學生展示,如果還沒有爲這些學生設置日期,它將顯示爲空。 這就是我想要的:http://i.imgur.com/jmsuSF5.png

所以總而言之,我需要顯示哪些行符合條款,哪些日期將爲空或不存在。 如何編寫此查詢?

+0

爲什麼被標記爲[tag:sql-server]? –

+0

您可以設置日期的默認值,並通過添加「OR」來檢查該值。 – aron9forever

回答

3

嘗試從查詢的末尾移動與連接表相關的條件,直到每個連接的表各自的ON子句。另外,如果您想要返回y78f2_attendance表中尚無行存在的記錄,則該表應該是LEFT OUTER已加入,而不是INNER已加入。

SELECT `y78f2_students`.`firstname` , `y78f2_students`.`lastName`, 
    `y78f2_students`.`student_id`,`y78f2_attendance`.`is_present`, 
    `y78f2_attendance`.`note`, `y78f2_attendance`.`thedate` 
FROM `y78f2_students` 
INNER JOIN `y78f2_enrolls` ON 
    `y78f2_enrolls`.`student_id` = `y78f2_students`.`student_id` 
    AND `y78f2_enrolls`.`crn_class` = 'Math1R1' 
LEFT OUTER JOIN `y78f2_attendance` ON 
    `y78f2_attendance`.`student_id` = `y78f2_students`.`student_id` 
    AND (`y78f2_attendance`.`thedate` IS NULL OR `y78f2_attendance`.`thedate` = '2016-01-24') 
WHERE `y78f2_enrolls`.`term` = 'Term 2 2016' 
ORDER BY thedate desc 
+1

這是正確的解決方案。 – NEV

+1

謝謝@Asaph,它效果很好。正是我需要的。再次感謝! – user1179214