2010-03-11 23 views
8

Ho qualche problema con un'istruzione SQL che deve trovare il numero di studenti che frequentano un corso. mio database di progettazione aspetto piace questo:Aiuto con istruzione SQL (JOIN)

Tabella corso: id | course_name

Tabella Studente: id | nome

E per collegare il rapporto a due molti-a-molti ho una tabella:

Tabella course_student: id | course_id | student_id

Quello che voglio è scoprire quanti studenti frequentano il corso denominato "Database Design". So che l'ID è "1" ma diciamo che non lo sapevo, come sarebbe la mia dichiarazione SQL?

Ho provato diverse dichiarazioni differenti con diversi unisce selezionare prima l'ID corretto dal corso tavolo , dove il nome è "Database Design" e accanto ho a cercare nel mio course_student tabella in cui la course_id uguale all'id fondato (in questo caso 1) e dove all student_id è connesso a questo id.

So che è una descrizione un po 'complessa quindi per favore dimmi se devo spiegarlo in un modo migliore.

Grazie Mestika

risposta

9

Si può provare qualcosa di simile

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' 

Non dovete aderire alla tabella studenti come già avete la ID nella tabella course_student, in modo da 1 meno aderire.

+1

maledettamente voi e le vostre abilità di battitura –

+1

buona, @astander. Stava lavorando fuori quando hai postato. GJ. – cazlab

+0

HEHE, scusa amico. Se SSMS fosse aperto 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

Sembra che l'astigiano mi abbia picchiato. – Gabe

+0

Ci ha battuti tutti. '/ – cazlab

+1

per il secondo esempio, non dovresti nemmeno unirti al tavolo * Corso *. –

0

solo uno stile leggermente diverso, ma stesso risultato

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

I join impliciti sono negativi. Per favore non incoraggiare l'uso di questa scarsa tecnica. – HLGEM

+0

Ho usato la tecnica con molto successo per molto tempo. Per favore, spiega cosa c'è di sbagliato in questo. – Jay