0

と の 2 つのテーブルがstudentsありcoursesます。studentsテーブルにはnameageおよびがありますssn

CoursesとがssnありCourseます。

現在、ssnテーブルcourses内は一意ではありませんが、students主キーです。

学生が受講しているクラスのいずれかを受講している学生を見つける必要がありますC(C結果のソリューションには の名前も含まれます)。

挑戦的な問題なのでどうでもいいのですが、解決策を知りたいです。

これまでのところ、次のunionような演算子を使用しようとしました:

SELECT ssn
FROM courses
UNION SELECT ssn
FROM students
WHERE name =  'c'

これは、テーブルからすべての ssn を返すだけcoursesです。この質問は、解決策を決定するために、両方のテーブルのセット UNION を効果的に見つけることを求めています。

どんな助けでも大歓迎です!

4

2 に答える 2

4
SELECT DISTINCT s2.ssn, s2.name
    FROM students s1
        INNER JOIN courses c1  /* Find all courses taken by student 'c' */
            ON s1.ssn = c1.ssn
        INNER JOIN courses c2  /* Find all students in all of c's courses */
            ON c1.course = c2.course
        INNER JOIN students s2 /* Get the details for each of those students */
            ON c2.ssn = s2.ssn
    WHERE s1.name = 'c'
于 2012-09-07T18:48:32.930 に答える
0
select distinct c1.ssn, s1.name from courses c1   // find distinct ssn and name for courses X (defined below)
inner join students s1 on c1.ssn=s1.ssn
where c1.course  in 
(select course
 from courses     // use to find all courses (say X) for student c
where ssn =
(select ssn from students where name='c'))  // find ssn of student

お役に立てれば

于 2012-09-07T19:04:42.583 に答える