2013-06-13 104 views
1

我不知道這一點,到目前爲止,我有這些表:MySQL的 - 選擇沒有匹配或有一個條件的行

  • 學生 - 列:ID,名稱
  • stud_class - 列:students_id,類標識碼
  • - 列:ID,courses_id
  • 課程 - 列:ID,名稱

,我需要選擇那些沒有匹配的行中的stud_class表學生OR那些誰在類的指定當然不是(在給定的過程是一個參數)。

例如:選擇沒有任何班級或班級中的學生,但不包括course.id = 2的班級。

我到目前爲止這樣做,但它不起作用,查詢返回沒有行。我知道這有點令人困惑,但我不知道如何在這種情況下使用JOINS。

SELECT students.id, students.name 
FROM students, stud_class, class 
WHERE (NOT (students.id = stud_class.students_id)) 
    OR ((students.id=stud_class.students.id) AND 
     (stud_class.class_id=class.id) AND 
     (NOT (class.course_id=2)) 
    ); 
+0

與您的問題無關,但您的查詢使用較舊的ANSI-89樣式連接。可能要考慮切換到[ANSI-92樣式JOINs](http://en.wikipedia.org/wiki/Join_%28SQL%29)。 – Leigh

回答

2

如果我正確地解釋你的問題,你要尋找的是在沒有班上某個課程所有學生 - 不管他們是否有其他類與否。在這種情況下,這是否工作?

SELECT id, name FROM students 
WHERE id NOT IN (
    SELECT stud_class.students_id FROM stud_class, class 
    WHERE stud_class.class_id = class.id 
    AND class.courses_id = 2 
) 

提交查詢誰是在類課程2的所有學生的ID(根據你的榜樣),以及主查詢得到誰在名單並非所有學生的ID。

+0

謝謝!這正是我想要的,它的工作完美無瑕。 –

相關問題