首页 > 解决方案 > MS Access SQL 员工培训数据库

问题描述

我有一个 Microsoft Access 数据库,用于跟踪员工培训。

该数据库有三个表:

tblEmployees(EmployeeID, Name, Function) 
tblTraining_Courses(CourseID, Title, Desc, Function)
tblTraining_Records(EmployeeID, CourseID, Date, Status)

EmployeeID 是他们的人员编号
Name 是员工的姓名
Function 是员工支持的产品线 - Electric、Lighting 或 Both(多值查找)
CourseID 是课程的 ID 号
Status 是课程是否已完成

我正在尝试查询“tblTraining_Records”表以查看哪些员工尚未完成培训课程。

我按照此处发布的另一个示例进行操作,效果非常好:Stackoverflow: MS Access SQL Course not Taken Example

但是,我还想根据员工功能是否与课程功能匹配来过滤该查询。该函数是一个多值查找字段,具有三个可能的选项电气、照明或两者。课程也可以只针对电气、照明或两者。

这是我用于查询的 SQL。

SELECT nested.EmployeeID, nested.Course_ID
FROM (SELECT distinct EmployeeID, Course_ID FROM tblEmployees, tblTraining_Courses) nested 
LEFT JOIN tblTraining_Records r ON r.EmployeeID = nested.EmployeeID AND r.Course_ID = nested.Course_ID
WHERE r.Employee is NULL;

任何帮助将不胜感激。谢谢

标签: sqldatabasems-access

解决方案


我将添加这种方法:(让我们称之为 Query1)当您加入所有 3 个表并拥有查询中的所有字段时 - 您将拥有 2 个名为 Function 的字段。这是不允许的,所以让我们将其别名为 eFunction for employee 和 cFunction for course。

然后创建一个计算字段: Completed: iif(cFunction = eFunction, "Yes", Null)

那么您可以在 Yes 上过滤 Query1


推荐阅读