我有一个包含 studentID ,课程和 start_date 列的表格,其中studentID是唯一的。 我想写一个查询,以便那些没有参加过2010年开学日期的课程的学生出现。我的问题是,即使他们在2010年参加了一门课程,我似乎也会回到所有已经上过2010年课程的学生。
SELECT DISTINCT studentID
FROM attendant
WHERE Startdatum NOT BETWEEN #1/1/2010# AND #12/31/2010#
我真正想要的是;如果它包含某个值,有没有办法不显示行?怎么样?
某种子查询?
答案 0 :(得分:2)
应该是这样的:
SELECT DISTINCT studentID FROM attendant
WHERE studentID NOT IN
(SELECT DISTINCT studentID FROM attendant
WHERE Startdatum BETWEEN #1/1/2010# AND #12/31/2010#)
答案 1 :(得分:1)
回答这个问题的一个好方法是使用having
子句:
SELECT studentID
FROM attendant
GROUP BY studentID
HAVING sum(iif(Startdatum BETWEEN #1/1/2010# AND #12/31/2010#, 1, 0)) = 0;
having
子句计算每个学生在该时间范围内所学的课程数量。如果有,则过滤器失败。