select T.course_id from course T
where 1 <=
( select count(R.course_id) from section R
where R.course_id = T.course_id
and R.year = 2009 );
此查询应该可以找到2009年最多提供一次的所有课程 但是,如果我们比较 &#34; 1&lt; =(子查询)&#34; 中的子查询结果,则子查询的结果可能包含重复的元组......所以,即使1&lt; = 2。
,where子句的结果也可能被评估为真答案 0 :(得分:0)
我相信您的查询等同于以下
select T.course_id
from course as T
left join section as R where T.course_id = R.course_id and R.year = 2009
group by T.course_id
having count(R.course_id) <= 1
尽可能使用group by
和having
。优化器通常比子查询好得多。
答案 1 :(得分:0)
此查询应该可以找到2009年最多提供一次的所有课程。
您需要从
交换条件1 <= (SELECT COUNT(r.course_id) ...
(在2009年找到一次或多次提供的课程)
到
1 >= (SELECT COUNT(r.course_id) ...
(2009年发现的课程为零或一次)
答案 2 :(得分:-1)
您的子查询只返回一个值,即2009年相关课程的部分计数。所以查询没有问题(除了它正在寻找至少一次的课程,你说你想要找一次最多的课程)。