2010-03-11 8 views
8

У меня возникли проблемы с оператором SQL, который должен найти количество студентов, посещающих курс. Моя база данных дизайн взгляд любит это:Help with SQL statement (JOIN)

Таблица курса: ID | название учебного процесса

Студент: ID | имя

И соединить два многие-ко-многим Я таблица:

Таблица course_student: идентификатор | course_id | student_id

Я хочу узнать, сколько студентов посещает курс под названием «Дизайн базы данных». Я знаю, что идентификатор «1», но скажем, что я не знал, как выглядит мой оператор SQL?

Я попытался несколько различных утверждений с различным присоединяется к первому выбрать правильный идентификатор из конечно таблицы, где имя «Проектирование баз данных» и рядом Я искать в моем course_student стола, где course_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, поэтому 1 меньше присоединиться.

+1

штопать вы и ваши навыки набрав –

+1

хороший, @astander. Разрабатывал это, когда вы отправляли сообщения. ГДж. – cazlab

+0

HEHE, извините, человек. Если бы SSMS открылся X-) –

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

+0

Он побил нас всех. '/ – cazlab

+1

для второго примера, вам даже не пришлось бы присоединяться к столу * Курс *. –

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

+0

Я использовал технику очень успешно в течение длительного времени. Пожалуйста, объясните, что с этим связано. – Jay