2017-10-05 3 views
0

ねえこの質問ありえないが、本当にきれいであれば、人々は申し訳ありませんが、SQLの行を返すために3つのテーブル

を以下のように、私はこの線に沿って行くの宿題クエストを持って行きます。 3つのテーブルがあり、この学生は姓「フィールド」となりますどのように多くの被験者返すために

をQUERを書く:私はので、私はこれが書かれ

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 

のようなものを持っている

Students: 
    StudentID 
    FirstName 
    LastName 

StudentCourses: 
     StudentCourseID 
     StudentID 
     CourseID 

Courses: 
     Maths 
     Science 
     English 
     P.E 
     Drama 
     Film Studies 

それをテストすることはできませんが、これは誰にとっても正しいようですか?

+1

いいえ、どこで許可されているかを見てください。また、何もカウントしない(_hint hint_) "何くらい" ...存在しないテーブルを参照します。 – Uueerdo

+1

あなたはほぼ確実にFULL JOINを望んでいません。 「学生」テーブルとは何ですか? 「学生」と同じではない?あなたの質問には言及されていません。また、なぜ "RoleID"フィールドを "CourseID"に参加させるか。一致しないようです。 – ADyson

+1

'mysql'と' tsql'タグは、原則として互換性がありません。すべてのSQL方言に対応するソリューションが必要ですか? – HABO

答えて

1

最後に来るはずです。そこから何も選択していないので、コーステーブルへの3回目の参加は実際には必要ありません。

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

次のクエリを試すことができます。 WHERE句は、学生が取るコース数を見つけると句は「フィールド」として、生徒の姓をフィルタリングするために使用する場所FROMJOIN

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

使用COUNT()関数の後でなければなりません。

SELECT s.StudentID, s.LastName, COUNT(sc.CourseID) 
FROM Students s 
JOIN StudentCourses sc 
ON s.StudentID = sc.StudentID 
WHERE s.LastName = 'Field’; 
関連する問題