2016-11-25 150 views
-3

我有一些表。他們有關於學生的信息。像基本的學生數據庫。 我當然有表:COURSE_ID,課程名稱關於sql查詢

Student_course : student_num,course_id 

student: name,student_num 

的學生可能需要超過1個療程。 像 Student_Course標籤:

Student_Num Course 

1    2 

1    3 

2    2 

我的問題是讓我們有一個過程,它的ID = 2。我想找個誰沒有參加這個課程的學生的名字。 這個標籤有可能嗎?如果有人可以幫忙嗎?

+1

請使用eiter'mysql'或'Oracle'標記DB的問題。請張貼您的表架構完全不像某事。請顯示一些示例數據,並請顯示您嘗試過的內容。這看起來像你的作業。尋求幫助沒有錯,但請至少展示你的努力。 – Kacper

回答

1

這是可能的(也很容易)。 NOT IN條件是解決方案的最可能的候選者。如果student_coursestudent_num被約束not null(因爲它應該是),您的查詢可能是簡單的

select student_name 
from student 
where student_id not in (select student_id 
          from student_course 
          where course_id = 2 
         ) 
; 

現在,你把之前在此作業,嘗試去了解它是如何工作的。如果有任何部分令人困惑,請回復以澄清。例如,想想爲什麼這會失敗,如果student_idstudent_course可能是null。您如何修改此解決方案以使其工作,即使可能在student_course表中爲null?只是在沒有任何想法的情況下轉而採取任何行動都無濟於事。

+0

呃我真的很容易,我不得不想更多的時間。 您可以提供一些關於您的問題的詳細信息:) 謝謝 –

+0

@MetehanAytaç - 如果您有示例表,請在'student_course'表中將'student_id'更改爲'null',其中'course_id = 2'的行更改爲'null'。然後再次運行查詢。看看發生了什麼?試圖找出原因。 (提示:'x NOT IN(a,b,c)'表示'x!= a AND x!= b AND x!= c' ...那麼如果將'a'改爲'null'? – mathguy