如何为以下查询编写 sql 语句?

How to write the sql statement for the below query?

我有一个 table(lab_schedule) 列如下,

c_code    labclass      day
EEI4163   2019-04-09   Sunday
EEI4362   2019-03-05   Monday
EEI4362   2019-04-07   Tuesday
EEI4456   2019-05-06   Wednesday

我想在 2019-03-05

查看没有实验的课程代码 class
select c_Code,labclass 
from lab_schedule 
where labclass != "2019-03-05" group by c_code,labclass;

我尝试使用 sql 中的 group by 语法来获取结果。但我只希望 EEI4163EEI4456 但它也显示 EEI4362,它位于 2019-04-07.

但是 EEI4362 课程在 2019-03-05 有一个实验 class。

一种方法使用聚合:

select c_Code
from lab_schedule
group by c_code
having sum(case when labclass = '2019-03-05' then 1 else 0 end) = 0

您的代码删除了行 where labclass = "2019-03-05",但如果课程代码在“2019-03-07”和另一个日期有实验室 class,它仍将在结果中包含另一个日期。
使用 NOT EXISTS:

select s.c_Code, s.labclass, s.day
from lab_schedule s
where not exists (
  select 1 from lab_schedule 
  where c_Code = s.c_Code and labclass = "2019-03-05"
)

如果您只想要 c_Code

select distinct s.c_Code
from lab_schedule s
where not exists (
  select 1 from lab_schedule 
  where c_Code = s.c_Code and labclass = "2019-03-05"
)

参见demo
结果:

您可以使用自外连接作为替代解决方案,如下所示:

select l1.c_Code, l1.labclass
from lab_schedule l1
left outer join lab_schedule l2 on l1.c_Code = l2.c_Code and l2.labclass = '2019-03-05'
where l2.c_Code is null
group by l1.c_Code, l1.labclass

编辑:如果您只想查看 c_code,请从 "select" 和 "group by" 语句中删除 l1.labclass。