2014-06-05 44 views
-2

我有3個表:SQL - 隱藏如何複製標識

enter image description here

我需要選擇一門課程的所有學生,不是當然的,但不重複的學生。例如:

我需要所有學生的課程的c_id = 1

應該顯示:

S_ID:1,2,3,4,5,6,7,8,...,所有

C_ID:1,空,1,NULL,NULL,..,所有

如果我需要所有的學生有一門課程的c_id = 2

應顯示:

S_ID:1,2,3,4,5,6,7,8,...,所有

C_ID:2,2,NULL,NULL,NULL,..,所有

或者任何想法如何向所有學生展示課程而不是課程?

我的事情嘗試:

SELECT st.*, co.`c_id` FROM `student` st 
LEFT JOIN `t_stud_cour` co ON st.`s_id` = co.`s_id` 

但是,顯示所有stundent(OK),並重復學生(X)

+0

您的查詢也返回_all_課程,這應該是一個很大的提示你,你需要添加第二個條件。 –

回答

1

你只需要一個左連接,而 「課程號」( C_ID)左側的ON子句中的條件加入

select s.s_id, sc.c_id 
from student s 
left join stu_cour sc on sc.s_id = s.s_id and sc.c_id = 1 

您只需要一個獨特的,如果學生能在T兩次他相同的課程(我懷疑這可能發生:例如,這意味着你將有兩次(1,1)在stud_cour表中)。

看到sqlfiddle,與樣品的c_id = 1和C_ID = 2

+0

是的,這是正確的,但這是一個不同的情況。它的工作完美。謝謝。 – rkv

0
SELECT distinct s.s_id, C.c_id, * FROM Student S 
LEFT OUTER JOIN Stud_Cour STC ON S.s_id = STC.s_id 
LEFT OUTER JOIN Course C ON STC.c_id = C.c_id