您好我正在使用以下架构评估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采取所有相同课程的情况下汤姆。然而问题是要找到至少参加过一门课程的学生,而不是所有的课程都是汤姆。也许我解释错了,但我可以使用一些澄清。
答案 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)