【发布时间】:2016-09-30 12:43:51
【问题描述】:
我有一个查询和一个表。查询“EmployeeTraining”包括员工姓名、他们参加的培训课程、参加日期和到期日。我希望 LeftJoin 返回的是所有可用的培训课程和每个员工缺少的课程,所以从本质上讲,任何空值。
“ApplicableTraining”共有 5 条记录。有些员工只参加了 4/5 的课程,在“EmployeeTraining”记录中只有 4 条记录。 left join 不应该返回该特定员工的第 5 个培训项目,在“datetaken”和“Expiry”中为空?
示例适用培训:
- WHMIS
- 急救
- 心肺复苏术
- 丙烷
- TDG
员工培训示例
- 山姆 | WHMIS | 05/03/2011 |05/03/2012
- 山姆 |急救 | 2010 年 6 月 9 日 | 2011 年 6 月 9 日
- 山姆 |心肺复苏术 | 2011 年 5 月 3 日 | 2012 年 5 月 3 日
- 山姆 |丙烷 | 2015 年 12 月 3 日| 2018 年 12 月 3 日
期望的结果
- 山姆 | WHMIS | 05/03/2011 |05/03/2012
- 山姆 |急救 | 2010 年 6 月 9 日 | 2011 年 6 月 9 日
- 山姆 |心肺复苏术 | 2011 年 5 月 3 日 | 2012 年 5 月 3 日
- 山姆 |丙烷 | 2015 年 12 月 3 日| 2018 年 12 月 3 日
- 山姆 | TDG | |
这是通过 Access 上的设计视图生成的左连接,但它根本不返回任何空值。
SELECT ApplicableTraining.AppTraining,
EmployeeTraining.Employee,
EmployeeTraining.DateTaken,
EmployeeTraining.Expiry
FROM ApplicableTraining LEFT JOIN EmployeeTraining ON ApplicableTraining.AppTraining = EmployeeTraining.Training;
我在这里上传了我的数据库https://drive.google.com/open?id=0B7foIFlbSH78cFpJOHFsYkxiUlU
【问题讨论】:
-
添加一些示例表数据,以及预期的结果。
-
显然没有没有员工的课程。
-
部分员工参加了4/5培训课程,查询中有4条记录。 Left Join 不应该返回第 5 个培训课程,“DateTaken”和 Expiry 为空吗?
-
您的查询应该与您的问题一样,我刚刚尝试过。您是否从查询中删除了任何内容(例如 Employee 上的 WHERE 子句)?您在 ApplicableTraining 和 EmployeeTraining 之间定义了关系吗?
-
applyTraining 和 EmployeeTraining (Query) 是一对多的关系。 EmployeTraining 查询基于我们的员工表和 3 个不同的培训表。