我创建了一个视图,其中包含来自表员工和课程的数据。使用这个视图我可以很容易地找到每个员工都上过哪些课程,但是我想知道(取决于员工的职位)他们没有上过哪些必修课。例如,所有职位为“cle”的新员工都必须参加数据保护课程(“数据”)。我如何返回所有没有参加过“数据”课程的职位为“cle”的员工?
我想我需要类似于 '!= 'data'' 的东西,它实际上返回所有有 'cle' 记录但没有针对他们的 'data' 记录的员工,而忽略所有其他人。
我希望有人明白这一点?
我创建了一个视图,其中包含来自表员工和课程的数据。使用这个视图我可以很容易地找到每个员工都上过哪些课程,但是我想知道(取决于员工的职位)他们没有上过哪些必修课。例如,所有职位为“cle”的新员工都必须参加数据保护课程(“数据”)。我如何返回所有没有参加过“数据”课程的职位为“cle”的员工?
我想我需要类似于 '!= 'data'' 的东西,它实际上返回所有有 'cle' 记录但没有针对他们的 'data' 记录的员工,而忽略所有其他人。
我希望有人明白这一点?
您的标题暗示了答案,请使用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
您将需要检查列名等,因为您没有给我们表结构,但您明白了。