我有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
:
select name
from student
left join student_course on id = st_id
where st_id is NULL
Using join
是“正常”且首选的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)