我有3张桌子。下面是结构:
student
id int, name varchar(20)
course
course_id int, subject varchar(10)
student_course
st_id int, course_id int
现在,我想编写一个查询来查找未注册任何课程的学生。如我所知,有多种方法可以获取此信息。您能否让我知道其中哪一个是最有效的,以及为什么呢。另外,如果还有其他更好的执行方法,请告诉我。
db2 => select distinct name from student inner join student_course on id not in (select st_id from student_course) db2 => select name from student minus (select name from student inner join student_course on id=st_id) db2 => select name from student where id not in (select st_id from student_course)
提前致谢!!
该子查询使用,无论是not in,minus或什么的,一般是低效的。常见的方法是left join:
not in
minus
left join
select name from student left join student_course on id = st_id where st_id is NULL
使用join是“正常的”和优先的解决方案。
join