如何以更好的方式重写这个嵌套查询?

时间:2012-07-20 09:07:42

标签: mysql sql oracle

我有这个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);

重写它的另一种或最佳方法是什么。

你的帮助将会得到帮助。

2 个答案:

答案 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。