0

有两个表,studentscourses。该students表有name和。agessn

CoursesssnCourse

现在表ssncourses的不是唯一的,但其中的一个students是主键。

我需要找出正在参加学生正在参加的任何课程的学生C(包括C的名字以及结果解决方案中的名字)。

这是一个具有挑战性的问题,所以我不介意,但我想知道解决方案是什么。

到目前为止,我尝试使用这样的union运算符:

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

所做的只是返回 table 中的所有 ssns 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 回答