我有这个sql,它找到了(不同的)学生的总数,这些学生已经修读了ID 10101教师授课的课程。
select count (distinct ID)
from takes
where (course_id, sec_id, semester, year) in
(select course_id, sec_id, semester, year
from teaches
where teaches.ID= 10101);
重写它的另一种或最佳方法是什么。
你的帮助将会得到帮助。
答案 0 :(得分:3)
为什么不使用ANSI Join?
select
count (distinct t1.ID)
from
takes as t1
inner join teaches as t2 on
t1.course_id=t2.course_id and
t1.sec_id=t2.sec_id and
t1.semester=t2.semester and
t1.year=t2.year
where
t2.ID= 10101
答案 1 :(得分:0)
select count (distinct ta.id)
from takes ta
where EXISTS
(select 1 from teaches te
where te.ID=10101
and te.course_id=ta.course_id
and te.sec_id=ta.sec_id
and te.semester=ta.semester
and te.year=ta.year)
使用EXISTS,因为一旦评估了外部查询,就会将BOOLEAN返回true / false。