2010-03-11 85 views
8

我遇到了一些SQL語句有問題,必須找到參加課程的學生人數。 我的數據庫的設計外觀很喜歡這樣的:SQL語句幫助(JOIN)

課程: ID | course_name

學生: ID |命名

而連接兩個多對一對多的關係我有一個表:

course_student: ID | course_id | student_id

我想知道有多少學生正在參加名爲「數據庫設計」的課程。我知道這個ID是「1」,但是假設我不知道,我的SQL語句將如何顯示?

我嘗試了好幾種不同的語句與不同的連接首先從當然表,其中名爲「數據庫設計」和明年我已經在我的course_student表進行搜索,其中COURSE_ID選擇正確的ID等於創建的ID(在本例中爲1),並且所有student_id都連接到此ID。

我知道這是一個有點複雜的描述,所以請告訴我,如果我必須以更好的方式解釋它。

感謝 Mestika

回答

9

你可以嘗試像

SELECT COUNT(cs.student_id) 
FROM Course c INNER JOIN 
     course_student cs ON c.id = cs.course_id 
WHERE c.course_name = 'Database Design' 

你不必加入到學生表作爲你已經在course_student表中的ID,所以少1加入。

+1

織補你和你的打字技能 – 2010-03-11 14:09:59

+1

好的,@astander。在您發佈時正在處理它。 GJ。 – cazlab 2010-03-11 14:10:19

+0

HEHE,對不起人。有SSMS打開X-) – 2010-03-11 14:10:41

0
SELECT count(a.id) 
FROM Course a 
INNER JOIN Course_Student b 
ON a.id = b.course_id 
WHERE a.course_name = 'Database Design' 
+0

看起來像一個旁觀者擊敗了我。 – Gabe 2010-03-11 14:13:11

+0

他擊敗了我們所有人。'/ – cazlab 2010-03-11 14:19:10

+1

對於第二個例子,你甚至不需要加入表*課程*。 – 2010-03-11 14:21:05

0

只是一個稍微不同的風格,但同樣的結果

select COUNT(cs.student_id) as counter from Course c, course_student cs where c.id = cs.course_id and c.course_name = 'Database Design'

+1

隱式連接是不好的。請不要鼓勵使用這種可憐的技術。 – HLGEM 2010-03-11 14:42:27

+0

我已經很長時間很成功地使用了這項技術。請解釋這是什麼錯誤。 – Jay 2010-03-11 15:01:46