SQL查询,不是EXISTS

时间:2015-12-02 10:33:04

标签: sql database-schema

您好我正在使用以下架构评估SQL查询:
学生( sid ,姓名,年龄,性别,部门,GPA)
教师( fid ,姓名,年龄,办公室,部门)
课程( cid ,姓名,说明)
教( fid cid ,术语)
报名( sid cid ,期限,成绩,最终成绩)

基于查询的问题是:
找到至少参加过一门课程的学生 查询如下:

SELECT *
FROM Student S1
WHERE NOT EXISTS (SELECT E1.cid
                  FROM Enrolment E1, Student S2
                  WHERE E1.sid = S2.sid 
                        AND S2.name = 'Tom'
                  MINUS
                  SELECT E2.Cid
                  FROM   E2 Enrollment
                  WHERE  E2.sid = S1.sid)

这个查询对我来说没有意义,因为对我来说,似乎NOT EXISTS条件只会在子查询为空时选择学生,而这只会发生在学生s1采取所有相同课程的情况下汤姆。然而问题是要找到至少参加过一门课程的学生,而不是所有的课程都是汤姆。也许我解释错了,但我可以使用一些澄清。

1 个答案:

答案 0 :(得分:0)

试试这个

DECLARE @TomID nvarchar(MAX)
set @TomID = (SELECT TOP 1 ID from Students where Name = 'Tom')

select distinct E1.SID from Enrollment E1 
where E1.SID != @TomID AND E1.CID in
(select distinct E.CID from Enrollment E
where E.SID=@TomID)