首页 > 解决方案 > 如何查找不存在的记录?

问题描述

我有 3 张桌子

表 1 是训练表:

培训编号 姓名 其他领域
1 无论是
2 bb 在这个领域里

表 2 为员工名单

企业标识 出生日期 等等
1 约翰 能源部 毫米
2 敌人 年年

表 3 是这两个表相交的表:

企业标识 培训编号 更新 ETC
1 3 ddmmy X
2 1 ddmmy X
2 2 ddmmy X
2 3 ddmmy X

我需要做的是查询这三个表并返回一个 EmpID 和一个 TrainingID 都不在第三个表中,所以在这个例子中,我理想的响应是:

企业标识 培训编号
1 1
1 2

到目前为止,我所做的并不是很好:

SELECT * 
FROM CompletedTrainings
LEFT JOIN Trainings ON Trainings.TrainingID = CompletedTrainings.Training
WHERE ISNULL ( Trainings.TrainingID

这将返回员工列表,但不会返回缺少的培训编号。

我已经尝试过使用 NOT EXISTS 的变体:

SELECT CompletedTrainings.Employee, CompletedTrainings.Training
FROM CompletedTrainings
WHERE NOT EXISTS (
SELECT TrainingID, [Training Name]
FROM Trainings
WHERE Trainings.TrainingID = CompletedTrainings.Training);

这再次返回员工姓名列表,但不返回缺少培训的名称。我怎样才能做到这一点?

标签: sqlms-access

解决方案


在 MS Access 中使用交叉连接(通过,),然后使用not existsleft join

select t.*, e.*
from trainings as t,
     employees as e
where not exists (select 1
                  from employeeTrainings as et
                  where et.EmpID = e.EmpID and et.trainingID = t.trainingID
                 );

推荐阅读