2010-03-11 79 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