如图所示,一名学生可以参加许多课程。许多课程都可以参加很多活动。
我正在尝试编写一个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;
无济于事。 我在谈论下图中的表格;
答案 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 join
和students
之间以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'
);