我创建了一个包含表员工和课程数据的视图。使用这个视图我可以很容易地找到每个员工所在的课程,但是我想知道(取决于员工职称)他们没有参加过什么必修课程。例如,所有职位名称为“cle”的新员工都需要参加数据保护课程(“数据”)。如何归还所有没有参加“数据”课程的职称'cle'的员工?
我认为我需要类似于'!='数据'的东西,它实际上会返回所有拥有'cle'记录但没有记录'数据'并且忽略所有其他人的员工。
我希望有人理解这一点?
答案 0 :(得分:1)
您的标题提示答案,请使用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'
)
请注意,我假设所有表格和列。但你应该明白这一点。
答案 1 :(得分:1)
尝试这样的事情:
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
你需要检查列名等,因为你没有给我们表格结构,但你明白了。