我来这里是为了帮助处理一个复杂的查询。为此,我尝试了很多不同的方法,但并没有得到我想要的结果。我的架构的淡化版本如下:有问题的三个表是Employees 表、EmployeeTraining 表和RequiredTraining 表。employees 表保存员工的信息,例如empID、姓名、地址、电子邮件、positionWorked 等。EmployeeTraining 表保存empID 和TrainingName。RequiredTraining 表保存Position 和TrainingName。
员工:empID、姓名、职位
EmployeeTraining:empID, trainingName
requiredTraining: 职位, 培训名称
这是一些示例数据,只是为了进一步澄清:
雇员
*EMPID~~Name~~Position~~
1 Ted Accountant
2 Bob Janitor
员工培训
**empID~~TrainingName**
1 Crunching Numbers
1 Microsoft Excel
1 Using an Abicus
2 Lemon Pledge 100
2 Scrubbing Toilets
需要培训
**position**~~**TrainingName**
Accountant Crunching Numbers
Accountant Microsoft Excel
Accountant Using an Abicus
Accountant TPS Reports
Janitor Lemon Pledge 100
Janitor Scrubbing Toilets
用英语,从长远来看,我想从表单中选择一个员工,并有一个子表单显示从该员工完成的所有培训(SELECT * FROM Employees INNER JOIn EmployeeTraining on employees.empid = employeetraining.empID WHERE empID =我.empID)
我还想要另一个子表单来显示员工尚未完成的当前职位所需的培训。这就是我挣扎的地方。我不熟悉或不习惯使用 MS Access 的查询生成器,但我尝试过“查找不匹配”查询以及尝试编写自己的查询。这似乎可以使用 MINUS 操作,但 MS Access 不支持 MINUS。我已经尝试了一个带有空谓词的 LEFT JOIN 以及从上述查询到 requiredTraining 表的查询的 NOT IN,但我没有得到我正在寻找的结果。
例如,我尝试为此示例数据编写的查询结果将是:
对于employeeID 1(Ted the Accountant)
ted需要“TPS报告”培训
员工 2(清洁工鲍勃)
Bob 已经完成了针对他的职位的所有培训。
我正在尝试的一个尝试查询的示例是:
SELECT employees.position,employeeTraining.empid,employeetraining.TrainingName
FROM EmployeeTraining
InNER JOIN Employees ON EmployeeTraining.empid = employees.empid
WHERE empid = '1'
LEFT JOIN
SELECT TrainingName,Position FROM requiredTraining
ON EmployeeTraining.Training = RequiredTraining.Training
WHERE (((EmployeeTraining.Training is Null)))
编辑:这个问题已经回答了。感谢大家的帮助。您的查询,虽然每个都不同,但都实现了目标。