如何为下面的查询编写sql语句?
我有一个tablelab_时间表列,如下所示如何为下面的查询编写sql语句?,sql,wampserver,Sql,Wampserver,我有一个tablelab_时间表列,如下所示 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没有实验课的课程代码 select c_Code,labclass from lab_schedule where
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没有实验课的课程代码
select c_Code,labclass
from lab_schedule
where labclass != "2019-03-05" group by c_code,labclass;
我试图通过在sql中使用GROUPBY语法来获得结果。但我预计只有EEI4163,EEI4456,但它也显示了EEI4362,这是在2019-04-07年
但EEI4362课程在2019-03-05有一个实验课。一种方法使用聚合:
select c_Code
from lab_schedule
group by c_code
having sum(case when labclass = '2019-03-05' then 1 else 0 end) = 0
您的代码将删除labclass=2019-03-05的行,但如果课程代码在2019-03-07有lab class且在另一个日期,它仍将与另一个日期的行一起出现在结果中。 不存在以下用途:
如果只需要c_代码列 看。
结果:您可以使用自外部联接作为替代解决方案,如下所示:
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_代码,请从select和group by语句中删除l1.labclass。我想查看2019-03-05没有实验课的课程代码是问题。如果您只想查看c_代码列,请查看我编辑的答案。
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"
)
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