2016-09-30 79 views
0

我试图创建一个查询,这将显示所有的员工,所有的每位员工采取了培训,所有可用(ApplicableTraining)培训将采取,即使员工没有采取它。如何使用相同的表创建多个连接?

样品适用培训:

WHMIS 
First Aid 
CPR 
Propane 
TDG 

样品EmployeeTraining

Sam | WHMIS | 05/03/2011 |05/03/2012 
Sam | First AID | 06/09/2010 | 06/09/2011 
Sam | CPR | 05/03/2011 | 05/03/2012 
Sam | Propane | 12/03/2015| 12/03/2018 

预期的效果

Sam | WHMIS | 05/03/2011 |05/03/2012 
Sam | First AID | 06/09/2010 | 06/09/2011 
Sam | CPR | 05/03/2011 | 05/03/2012 
Sam | Propane | 12/03/2015| 12/03/2018 
Sam | TDG | | 

[http://imgur.com/jMU6fgt][1]

当我尝试创建这些连接,它告诉我我试图创建模糊的联接。

然后我试图创建一个查询,是所有员工的leftjoin &工会,他们已经采取了培训。这样产生的表是员工|培训| Datetaken |到期

SELECT ApplicableTraining.AppTraining, 
EmployeeTraining.Employee, 
EmployeeTraining.DateTaken, 
EmployeeTraining.Expiry 

FROM ApplicableTraining LEFT JOIN EmployeeTraining ON ApplicableTraining.AppTraining = EmployeeTraining.Training; 

与此查询,我试图创建另一个查询leftjoins适用的培训(提供所有培训的列表)来此查询。但是,该员工没有参加任何培训课程。例如:如果我没有参加CPR培训,我想要一个记录显示为“ME | CPR | | |

+1

编辑你的问题,包括查询与你所得到的错误消息一起。 –

+0

您发布不会返回任何查询对于“员工”的时候,培训是TDG,因此在第二次的传球,当你尝试做一个左连接对雇员字段此查询值,你会得到一个模棱两可的加入为你的第一个查询的会出现空值[员工]字段。 – geeFlo

+0

你的左连接看起来不错。显示无效的完整查询。 – Bohemian

回答

0

我的建议是尝试雇员与适用培训之间的CROSS JOIN,然后将此查询留给所有人训练结果查询从图形中看出两个表格都留下了所有这些表格,这应该会返回给您所有员工和所有可用的培训,并显示他们存在的培训结果。工会一起你的训练成绩第一,不过,为了避免重复行。

+0

不太熟悉CROSS JOIN,但我会和员工之间ApplicableTraining加入吗?适用的培训只是一系列可用的课程。员工只是一个名称,ID和电话号码列表。 – Macellaria

+0

A [交叉连接(https://support.office.com/en-us/article/Join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6#bmcross)在任何事情没有链接所有。因此,您将在每个组合中返回每个员工与每个适用培训相结合。这确保了所有员工和所有可用的培训都会被退回。从这你可以离开加入找到可用的员工培训。请注意,在执行最终连接之前,您必须首先别名ApplicableTraining.id或Employee.id。 – JJ32

相关问题