返回不存在搜索数据的记录



我创建了一个视图,其中包含来自表格员工和课程的数据。使用此视图,我可以轻松找到每个员工都参加过哪些课程,但是我想知道(取决于员工的职位)他们没有参加过哪些必修课程。例如,所有职位为"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

您将需要检查列名等,因为您没有向我们提供表结构,但您明白了。

最新更新