首页 > 解决方案 > 如何从 SQL 中选择不具有特定值的记录

问题描述

我有一份需要完成多个英语水平的学生名单。有没有办法找到那些正在学习英语但还没有进入下一个级别的学生

ID   STUDENTID  NAME     ENGLISHLEVEL   STARTDATE     ENDDATE
----------------------------------------------------------------
 1    001       Eric     English-1      2017-01-01    2018-01-01
 2    002       Brian    English-1      2017-01-01    2017-01-31
 3    002       Brian    English-2      2017-02-01    2017-03-01
 4    003       David    English-1      2017-05-01    2017-06-01
 5    003       David    English-2      2017-06-02    2017-07-03

我有一个类似于上面的数千名学生的列表,我想知道如何查询该表以向我展示那些学习过英语 1 但从未开始使用英语 2 或英语 3 的学生

建议将不胜感激。

标签: sql

解决方案


您可以使用outer join. 让外部连接表检查 English2/3,然后过滤掉任何匹配的结果。

select
    eng1.*
from
    students_table eng1
    left outer join students_table eng2
        on (
            eng1.STUDENTID=eng2.STUDENTID 
            and eng2.ENGLISHLEVEL in ('English-2', 'English-3')
        )
where
    eng2.STUDENTID is null -- Filter out rows where an eng2 row was found

推荐阅读