SQL找到从未上过课的学生(无子查询或集合)

问题描述 投票:0回答:1

因此,我们有两个表:学生

id | name
1  | st1
2  | st2
3  | st3

classes

id | title    | student_id | visited
1  | class1   |  1         | false
2  | class2   |  1         | true
3  | class3   |  1         | false
4  | class4   |  1         | false
5  | class5   |  2         | true
6  | class6   |  3         | false

并且问题是如何找到从未上过课的学生没有子查询或聚合函数(仅允许使用联接和别名)。老实说,我试图找出解决方案,但失败却失败了希望它甚至存在。

sql join relational-algebra
1个回答
0
投票

在SQL中,我将使用过滤的外部外部联接来执行此操作:

select s.*
from students s
  left join classes c on s.id = c.student_id and c.visited
where c.id is null;

但是使用子查询的NOT EXISTS条件通常更有效。

Online example

© www.soinside.com 2019 - 2024. All rights reserved.