如何为以下查询编写 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 语法来获取结果。但我只希望 EEI4163
、EEI4456
但它也显示 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。
我有一个 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
查看没有实验的课程代码 classselect c_Code,labclass
from lab_schedule
where labclass != "2019-03-05" group by c_code,labclass;
我尝试使用 sql 中的 group by 语法来获取结果。但我只希望 EEI4163
、EEI4456
但它也显示 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。