我有一个现有的Access数据库,其中包含员工的培训记录。如果员工已接受培训或已安排接受培训,则链接表中会有记录。如果没有,就没有记录。我想查询所有未经过某些事情培训的员工,但没有任何记录。
数据库如下:
Table: Trainings
TrainingID AutoNumber
Description Text
...
Table: EmployeeTrainings
EmployeeTrainingID AutoNumber
TrainingID Number
EmployeeID Number
ScheduledDate Date/Time
...
Table: Employees
EmployeeID Number
FullName Text
...
对于没有接受过特定培训培训的员工,我希望得到以下结果:
Trainings.Description,Employees.FullName,EMployeeTrainings.ScheduledDate
我怎样才能做到这一点?我需要一些指导。
答案 0 :(得分:2)
我认为这应该适合你...但是,由于他们没有接受过培训,我们无法为他们编制培训日期,因此我只包括两列...
select
t.Description,
emp.FullName,
et.ScheduledDate
from
trainings t
join employees emp
left join EmployeeTrainings et
on emp.EmployeeID = et.EmployeeID
AND et.TrainingID = t.TrainingID
where
t.TrainingID IN ( 1, 3 )
order by
t.Description,
emp.FullName
这应该可以得到你想要的东西......通过LEFT JOIN,它会返回连接左侧的所有条目,并将记录返回到右表。如果右侧没有这样的记录(因此从未安排过的员工),他们的预定日期值将显示为NULL ...对于那些DID找到正确匹配的人,将其日期包含在结果集中。对IN子句中的“Access”语法不肯定......但它应该像在其他SQL引擎中一样工作。