1

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

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

您的帮助将不胜感激。

4

2 回答 2

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
于 2012-07-20T09:15:20.433 回答
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。

于 2012-07-20T09:13:34.353 回答