2011-06-08 82 views
2

我有一个现有的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

我该如何做到这一点?我需要一些指导。

回答

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引擎中那样工作。

+0

您没有看到与现有计划日期相匹配的方式并将其他计划留为空白? – MAW74656 2011-06-08 16:52:05

+0

@ MAW74656,请参阅修订后的答案 – DRapp 2011-06-08 17:10:38

+0

好的,我想我明白这一点。是否可以通过多种培训来做到这一点?即给我所有未接受过培训1或3培训的员工? – MAW74656 2011-06-08 17:15:16