我有一个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;
任何帮助将不胜感激。谢谢
答案 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