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

时间:2013-09-30 12:24:24

标签: sql sql-server-2008

我创建了一个包含表员工和课程数据的视图。使用这个视图我可以很容易地找到每个员工所在的课程,但是我想知道(取决于员工职称)他们没有参加过什么必修课程。例如,所有职位名称为“cle”的新员工都需要参加数据保护课程(“数据”)。如何归还所有没有参加“数据”课程的职称'cle'的员工?

我认为我需要类似于'!='数据'的东西,它实际上会返回所有拥有'cle'记录但没有记录'数据'并且忽略所有其他人的员工。

我希望有人理解这一点?

2 个答案:

答案 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

你需要检查列名等,因为你没有给我们表格结构,但你明白了。