MS Access SQL员工培训数据库

时间:2019-01-11 05:13:14

标签: sql database ms-access

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

数据库具有三个表:

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

EmployeeID是他们的人员编号
名字是员工的名字
功能是员工支持的产品线-电气,照明或两者(多值查找)
CourseID是课程的ID号
状态是课程是否已完成

我正在尝试查询“ 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;

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

2 个答案:

答案 0 :(得分:0)

使用嵌套表加入课程,然后在where子句中添加新条件,如下所示:

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
inner join   tblTraining_Courses tc on  nested.course_ID=tc.CourseID
WHERE r.Employee is NULL and tc.Title IN ('Electrical', 'Lighting');

答案 1 :(得分:0)

我将添加这种方法:(让我们称之为Query1) 当您联接所有3个表并在查询中具有所有字段时,您将有2个名为Function的字段。不允许这样做,因此让我们为员工的eFunction和课程的cFunction别名。

然后创建一个计算字段: 已完成:iif(cFunction = eFunction,“ Yes”,Null)

然后您可以按“是”过滤Query1