使用第三个表来定义我的选择

时间:2016-02-25 03:22:44

标签: sql oracle11g

如图所示,一名学生可以参加许多课程。许多课程都可以参加很多活动。

我正在尝试编写一个select语句,用于选择参加特定事件的类别的学生。

我尝试过使用:

select students.student_id
from students
left join student_class
on students.student_id = student_class.student_id
where student_class.class_id = event.event_id
and student_class.class_id = event.class_id;

无济于事。 我在谈论下图中的表格;

enter image description here

2 个答案:

答案 0 :(得分:0)

我明白了!

select students.*
from students
join student_class
on students.student_id = student_class.student_id
where
    (select distinct event.class_id 
    from event
    inner join student_class
    on student_class.class_id = event.class_id
    where upper(event.event_name) = 'GUEST SPEAKER'
    ) = student_class.class_id;

我必须像inner joinstudents之间以students_class开头的链一样工作。然后我使用where子句中的子选择的输出来定义外部选择中的最终输出。

答案 1 :(得分:0)

只是为了感兴趣,您可以通过以下方式将冗余连接移至student_class。您可以使用相关的where exists子句:

select students.*
from students
where exists (
  select null
  from student_class
  join event
  on event.event_id = student_class.event_id
  where students.student_id = student_class.student_id
  and upper(event.event_name) = 'GUEST SPEAKER'
  );