私は評価結果のデータベースを持っており、生徒、学年、年、学期を識別するフィールドがあります。以下のクエリは、ある開始点と終了点で特定の科目の評価を受けている生徒を見つけます。
SELECT
a1.PupilId
FROM assessment as a1
JOIN assessment as a2
USING (PupilId)
WHERE a1.GradeID in('1A','1B','1C')
AND a2.GradeID in('5A','5B','5C')
AND a1.NCYear = '1'
AND a1.Term = '6'
AND a2.NCYear = '2'
AND a2.Term = '6'
AND a1.Subject = '31'
AND a2.Subject = '31'
AND a1.Type = 'assessment'
AND a2.Type = 'assessment'
これは問題なく動作しますが、ここで、開始学年 (つまり、NCYear='1' および Term='6') を持っているが、最終学年へのエントリを持っていない生徒を見つけたいと考えています。NOT EXISTS をいじってみましたが、うまくいきません。
明確にするために、評価表を次に示します。
id | Subject | PupilId | NCYear | Term | GradeID | Type
--------------------------------------------------------
1 | 31 | 1 | 1 | 6 | 1A | assessment
2 | 31 | 1 | 2 | 6 | 5A | assessment
3 | 31 | 2 | 1 | 6 | 1A | assessment
上記の SQL クエリは PupilID 1 を返す必要があります。PupilID 2 を返すクエリが必要です。開始評価はありますが、終了評価はありません。
助言がありますか?