因此,我们有两个表:学生
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中,我将使用过滤的外部外部联接来执行此操作:
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条件通常更有效。