sql - 如何查找不存在的记录?
问题描述
我有 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);
这再次返回员工姓名列表,但不返回缺少培训的名称。我怎样才能做到这一点?
解决方案
在 MS Access 中使用交叉连接(通过,
),然后使用not exists
或left 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
);
推荐阅读
- python - 将 csv 文件作为参数传递给函数
- angular - 我被火力和角度困住了
- google-app-engine - 错误:(gcloud.app.deploy)INVALID_ARGUMENT“version.entrypoint.shell”。这可以是一个空值
- azure - Azure/PowerShell:如何查询磁盘状态?(Azure 托管磁盘)
- python - 提取json文件中的所有链接
- sapui5 - 使用 SheetJS 时出现“未捕获的 TypeError:XLSX.read 不是函数”
- laravel - 如何更新 API 资源 Laravel?
- c# - 使用 mono 在 Linux 上查看 C# 代码的 CIL
- dart - 如何使用颤振在绘图中禁用多点触控
- javascript - 如何在 NodeJS 中仅导出一个函数?