日期:2014-05-17 浏览次数:20777 次
-- 3. 查出没选择课程的集合为空的学生 select distinct name from student s where not exists ( -- 2.查出每个学生没有选择的课程 select * from course c where not exists ( -- 1.查出每个学生选择的课程 select * from choose_course cc where cc.cid=c.id and cc.sid=s.id ) );
------解决方案--------------------
否定之否定,呵呵。
总体了是查询选择了课程的学生的姓名。
select distinct name -- 2查询选择了课程的学生姓名 from student s where not exists ( select * from course c -- 1查询没有被选择的课程 where not exists ( select * from choose_course cc where cc.cid=c.id and cc.sid=s.id ) );
------解决方案--------------------
那我把你理解的内容修改下,如果还看不明白就没办法了。
for rows in(select * from student s) loop for rows in(select * from course c) loop if(not exists(select * from choose_course cc where cc.cid=c.id and cc.sid=s.id)) then --output the record 这里没有输出记录,只是返回了一个集合给外层SELECT return course record -- 1. 如果当前学生没有选择当前课程,则在课程子查询集合中加入该课程的记录 end if end loop if(not exists(course record)) then output the record -- 如果当前学生的未选择课程的集合为空,则输出该学生的记录 end if end loop