如何查询三表关联下未出现在关联表的员工ID与培训ID组合
需求实现方案
核心逻辑
你需要先拿到所有员工和所有培训的全量组合,再过滤掉已经存在于完成记录表中的配对,剩下的就是你要的未完成培训的员工+培训组合。你之前写法的问题在于始终以CompletedTrainings作为主查询表,该表本身只存储已完成的记录,自然查不到不存在的配对。
实现代码
写法1:CROSS JOIN + LEFT JOIN
SELECT e.EmpID, t.TrainingID FROM 员工表 e CROSS JOIN Trainings t LEFT JOIN CompletedTrainings ct ON e.EmpID = ct.EmpID AND t.TrainingID = ct.TrainingID WHERE ct.EmpID IS NULL
写法2:CROSS JOIN + NOT EXISTS
SELECT e.EmpID, t.TrainingID FROM 员工表 e CROSS JOIN Trainings t WHERE NOT EXISTS ( SELECT 1 FROM CompletedTrainings ct WHERE ct.EmpID = e.EmpID AND ct.TrainingID = t.TrainingID )
验证说明
用你提供的示例数据执行上述语句,会正确返回预期结果:
| EmpID | TrainingID |
|---|---|
| 1 | 1 |
| 1 | 2 |
内容的提问来源于stack exchange,提问作者Christopher J. Joubert
相关产品推荐
相关产品推荐

