0

我创建了一个视图,其中包含来自表员工和课程的数据。使用这个视图我可以很容易地找到每个员工都上过哪些课程,但是我想知道(取决于员工的职位)他们没有上过哪些必修课。例如,所有职位为“cle”的新员工都必须参加数据保护课程(“数据”)。我如何返回所有没有参加过“数据”课程的职位为“cle”的员工?

我想我需要类似于 '!= 'data'' 的东西,它实际上返回所有有 'cle' 记录但没有针对他们的 'data' 记录的员工,而忽略所有其他人。

我希望有人明白这一点?

4

2 回答 2

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'
)

请注意,我假设所有表格和列。但你应该明白这一点。

于 2013-09-30T12:27:25.493 回答
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

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

于 2013-09-30T12:38:55.003 回答