sql - 选择另一个表中丢失的记录的有效方法

标签 sql database join

我有 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 inminus 还是其他,通常都是低效的。常用的方法是 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/

相关文章:

php - CodeIgniter Sqlite 不工作

sql-server - SQL Server 2005 复制

java - 数据库操作后如何刷新listView

sql - 使用聚合函数在 Select 查询中连接多个表

mysql - 连接两个不同列上的表

MySQL 将字段连接到结果集

c# - 在 Entity Framework 中调用存储过程时的字符串准备

java - JAVA连接后如何检查数据库是否存在

php - MySQL 删除行如果

python - 数据库设计中表的对应对象