小编典典

选择其他表中缺少的记录的有效方法

sql

我有3张桌子。下面是结构:

  • studentid int, name varchar(20)
  • coursecourse_id int, subject varchar(10)
  • student_coursest_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)

提前致谢!!


阅读 141

收藏
2021-04-14

共1个答案

小编典典

该子查询使用,无论是not inminus或什么的,一般是低效的。常见的方法是left join

select name 
from student 
left join student_course on id = st_id
where st_id is NULL

使用join是“正常的”和优先的解决方案。

2021-04-14