我有 3 个表。结构如下:
学生
(id int, name varchar(20)
)类(class)
(course_id int, subject varchar(10)
)student_course
(st_id int, course_id int
) -> 包含注册类(class)的学生姓名
现在,我想编写一个查询来找出没有注册任何类(class)的学生。正如我所知,有多种方法可以获取此信息。你能告诉我其中哪一个是最有效的吗,为什么。另外,如果有任何其他更好的执行方法,请告诉我。
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
使用 join
是“正常”的首选解决方案。
关于sql - 选择另一个表中丢失的记录的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380164/