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

Sql 返回不存在搜索数据的记录,sql,sql-server-2008,Sql,Sql Server 2008,我创建了一个视图,其中包含来自表employees和courses的数据。使用这个视图,我可以很容易地找到每个员工都上过哪些课程,但是我想知道(取决于员工的职称)他们没有上过哪些必修课。例如,所有职称为“cle”的新员工都必须参加数据保护课程(“数据”)。我如何返回所有未参加“数据”课程且职称为“cle”的员工 我想我需要类似于“!=”的东西数据“”,其中它实际返回所有具有“cle”记录但没有针对他们的“数据”记录的员工,并忽略所有其他员工 我希望有人能理解这一点。您的标题给出了答案,请使用不存

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

我想我需要类似于“!=”的东西数据“”,其中它实际返回所有具有“cle”记录但没有针对他们的“数据”记录的员工,并忽略所有其他员工


我希望有人能理解这一点。

您的标题给出了答案,请使用
不存在

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

您需要检查列名等,因为您没有给我们表格结构,但您知道了。

请为此类问题提供表格结构。和
!=数据
在SQL server中变为
数据
不存在
在SQL server中
左侧外部联接
语法的效率低于
不存在
,因为它需要联接所有行,然后消除匹配项。此外,如果联接列可为NULL,您甚至会得到不可预测的结果,因为无法区分不存在的行和确实存在但该列为NULL的行。嗯,有趣的是,它的性能较差。如果选择适当的列,结果将是可预测的。我不同意这篇文章所说的
LEFT JOIN
语法可读性较差,尽管这只是个人喜好的结果。我不得不改变一些我最初的观点,但现在它开始工作了