SQL每年保留学生

时间:2017-10-09 19:28:05

标签: sql ms-access

我在Access工作。我有两张表[2015F]和[2016f],它们都包含每年的现有学生。我使用student_ID作为两者的主键。

这就是我目前获得2015年至2016年新生入学率的方式

我从[2015F]创建了一个包含所有新生的新表。然后我从[2016F]创建了一个新表,其中包含了2015年的student_id。最后,我使用下面的查询来获得2015年新生的学生,这些学生在2016年没有回来。

SELECT [2015Freshmen].*
FROM 2015Freshmen
WHERE [2015Freshmen.SPRIDENSPRIDEN_ID] NOT IN (SELECT  [2015Fenrolled16.SPRIDENSPRIDEN_ID]
FROM [2015Fenrolled16]
);

仅使用[2015F]和[2016F]是否有更简单的方法来生成这些结果。

我在访问数据库工作。

1 个答案:

答案 0 :(得分:1)

任务:返回2015F中2016F中不存在的所有记录。

使用LEFT Join的一种方法(返回所有2015年记录和匹配的2016记录(如果存在)。然后排除存在216记录的所有记录

SELECT * 
FROM 2015F 
LEFT JOIN 2016F
 on 2015F.SPRIDENSPRIDEN_ID = 2016F.SPRIDENSPRIDEN_ID
WHERE 2016F.SPRIDENSPRIDEN_ID is null

或者使用不存在和相关的子查询 返回2016F中不存在的所有2015F记录。假设两个表中的SPRIDENSPRIDEN_ID相同。

SELECT * 
FROM 2015F 
WHERE NOT EXISTS (SELECT * 
                  FROM 2016F
                  WHERE 2015F.SPRIDENSPRIDEN_ID = 2016F.SPRIDENSPRIDEN_ID)