sql - 如何从 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 的学生
建议将不胜感激。
解决方案
您可以使用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
推荐阅读
- c# - 使用正则表达式忽略特定字符串
- oracle12c - 刷新表中的数据而不在 adf 12c 中重建项目
- android - 如何下载特定国家/地区的离线地图
- css - 通过属性指令将 CSS 样式传递给子 HTML 元素
- python - 在我的函数中循环遍历字典值
- javascript - 如何使用 JSON 数据创建动态表?
- c# - 体素树生成器
- c# - 在导航中传递数据
- c++ - 使用 const 变量时无效使用非静态数据成员
- java - org.openqa.selenium.WebDriverException:未知错误:无法通过 Java 使用 ChromeDriver Chrome 和 Selenium 聚焦元素