2017-10-05 1 views
0

Hey Leute leid, wenn diese Frage ist nicht wirklich sauber zurückzubringen, aber es geht wie folgtSQL drei Tabellen eine Zeile

ich eine Hausaufgaben Quest haben, die entlang der Linien von dieser geht. schreibt quer zurückzukehren, wie viele Themen dieser Schüler mit dem

Namen „Feld“ nimmt

die drei Tabellen sind:

Students: 
    StudentID 
    FirstName 
    LastName 

StudentCourses: 
     StudentCourseID 
     StudentID 
     CourseID 

Courses: 
     Maths 
     Science 
     English 
     P.E 
     Drama 
     Film Studies 

Ich habe so etwas wie

SELECT Students.studentID, 
     Students.Lastname, 
     Students.CourseID 
    FROM Students 
WHERE Students.LastName = "Field" 
INNER JOIN StudentCourses 
    ON Student.CourseID = StudentCourses.CourseID 
    FULL JOIN Student 
    ON Student.RoleID = Courses.CourseID 

Diese so geschrieben i kann es nicht testen, aber scheint das für jeden richtig zu sein?

+1

Nein, schauen Sie, wo 'WHERE' erlaubt ist; Außerdem zählt nichts (_hint hint_) "wie viele" ... und verweist auf eine Tabelle, die nicht existiert. – Uueerdo

+1

Sie wollen mit Sicherheit keinen FULL JOIN. Und was ist "Student" -Tisch? Nicht dasselbe wie "Studenten"? Es ist nicht in Ihrer Frage erwähnt. Und warum treten Sie einem Feld "RoleID" zu "CourseID" bei. Sie scheinen nicht übereinzustimmen, entweder – ADyson

+1

Die Tags 'mysql' und' tsql' sind in der Regel inkompatibel. Benötigen Sie eine Lösung, die für alle Arten von SQL-Dialekten funktioniert? – HABO

Antwort

1

Wo sollte zuletzt kommen. Sie brauchen den dritten Join nicht wirklich zum Kurstisch, weil Sie nichts daraus auswählen.

SELECT st.STUDENTID, 
     st.LASTNAME, 
     count(stc.COURSEID) as COURSECOUNT 
FROM STUDENTS st 
     INNER JOIN STUDENTCOURSES stc 
       ON st.COURSEID = stc.COURSEID 
WHERE st.LASTNAME = 'Field' 
0

Sie können die folgende Abfrage versuchen. WHERE Klausel sollte

nach FROM und JOIN Klauseln
SELECT s.studentid, 
     s.lastname, 
     COUNT(sc.courseid) 
    FROM student s 
    JOIN studentcourses sc 
    ON s.studentid = sc.studentid 
WHERE s.lastname = 'Field' 
2

Verwendung COUNT() gibt die Anzahl der Kurse zu finden, der Schüler nimmt und WHERE-Klausel des Schülers Nachnamen als ‚Feld‘ zu filtern.

SELECT s.StudentID, s.LastName, COUNT(sc.CourseID) 
FROM Students s 
JOIN StudentCourses sc 
ON s.StudentID = sc.StudentID 
WHERE s.LastName = 'Field’;