我创建了一个视图,其中包含来自表格员工和课程的数据。使用此视图,我可以轻松找到每个员工都参加过哪些课程,但是我想知道(取决于员工的职位)他们没有参加过哪些必修课程。例如,所有职位为"cle"的新员工都必须参加数据保护课程("数据")。如何返回所有职位为"cle"但尚未参加"数据"课程的员工?
我想我需要类似于"!="数据"的东西,它实际上返回所有有"cle"记录但没有针对他们的"数据"记录的员工,并忽略所有其他员工。
我希望有人明白这一点?
您的标题建议答案,请使用NOT EXISTS
:
SELECT e.*
FROM dbo.Employee e
WHERE [job title] = 'cle'
AND NOT EXISTS
(
SELECT 1 FROM dbo.Courses c
WHERE c.EmployeeID = e.EmployeeID
AND c.ProtectionCourse = 'data'
)
请注意,我已经假定所有表和列。但你应该明白这个想法。
尝试这样的事情:
SELECT
*
FROM
employee e
LEFT JOIN
courses c
ON
e.employeeID = c.employeeID and
c.courseType = 'data'
WHERE
e.jobTitle = 'cle' and
c.employeeID is null
您将需要检查列名等,因为您没有向我们提供表结构,但您明白了。