我想在rails上做下面的紅寶石,但即使我能在mysql中得到一個很好的答案。如果其中一個關聯表的列無法滿足條件,我該如何忽略表中的一行?
我有表學生和課程。學生 - >課程是一對多的關係。
Student Course |--------------| |--------------------------------------| |id| name | |id | course_name | grade | student_id | |---------- | |--------------------------------------| |S1| student 1 | |C1 | Course1 | A | S1 | |S2| student 2 | |C2 | Course2 | C | S1 | |---------- | |C3 | Course1 | A | S2 | |C4 | Course2 | B | S2 | |--------------------------------------|
select * from Student
where id NOT IN (select student_id from Course where grade = 'C')
我想用單一SQL來實現同樣的結果JOIN語句或使用ActiveRecord。
第一個SQL語句的工作。我無法理解爲什麼你在哪裏使用'IS NULL'。你能詳細說明一下嗎? – chetu 2011-05-13 14:00:48
@chetu:即使在右側表格(課程)中沒有相應的行,LEFT JOIN可確保左側表格(學生)中的所有行都顯示在結果中。右側列 - 在沒有任何「真實」數據的情況下 - 爲NULL。在這個查詢中,他們是我們想要的學生...在課程表中按等級='C'過濾時沒有顯示的學生。 – 2011-05-13 23:01:43
謝謝你,考伊! – chetu 2011-05-16 15:30:42