SQL 查询全部存在

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

这是一道关系除法题。有多种方法可以解决它。在这种情况下最简单的使用 COUNT:

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

这不涉及学生选修不在 @Course

中的课程的情况

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

  1. Select 所有独特的学生...
  2. 没有课程的地方...
  3. 那个学生不存在。

解决方案

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 ) )

Fiddle 查看实际情况。