SQL query exists all



我需要一个查询,使用下面两个表列出所有可用课程的学生。

declare @Course table (CourseID nvarchar(4))
declare @CourseStudent table 
(
CourseID nvarchar(4),
Student nvarchar(50)
)
insert into @Course values ('SOS1')
insert into @Course values ('MAT3')
insert into @Course values ('FEN2')
insert into @CourseStudent values ('MAT3', 'Mehmet')
insert into @CourseStudent values ('SOS1', 'Ahmet')
insert into @CourseStudent values ('MAT3', 'Ahmet')
insert into @CourseStudent values ('FEN2', 'Ahmet')
insert into @CourseStudent values ('SOS1', 'Ali')
insert into @CourseStudent values ('FEN2', 'Ayse')
select * from @Course
select * from @CourseStudent

您可以嵌套一些not exists查询。下面的解决方案翻译如下:

  1. 选择所有唯一的学生…
  2. 该学生不存在。

解决方案

select distinct cs.Student
from @CourseStudent cs
where not exists ( select 'x'
from @Course c
where not exists ( select 'x'
from @CourseStudent cs2
where cs2.CourseID = c.CourseID
and cs2.Student = cs.Student ) )

查看实际情况

这是一个关系除法问题。有很多方法可以解决这个问题。本例中最简单的使用COUNT:

SELECT cs.Student
FROM @CourseStudent cs
GROUP BY cs.Student
HAVING COUNT(*) = (SELECT COUNT(*) FROM @Course);

这并不涉及学生选修@Course以外的课程的情况

最新更新