Sql 返回不存在搜索数据的记录
我创建了一个视图,其中包含来自表employees和courses的数据。使用这个视图,我可以很容易地找到每个员工都上过哪些课程,但是我想知道(取决于员工的职称)他们没有上过哪些必修课。例如,所有职称为“cle”的新员工都必须参加数据保护课程(“数据”)。我如何返回所有未参加“数据”课程且职称为“cle”的员工 我想我需要类似于“!=”的东西数据“”,其中它实际返回所有具有“cle”记录但没有针对他们的“数据”记录的员工,并忽略所有其他员工Sql 返回不存在搜索数据的记录,sql,sql-server-2008,Sql,Sql Server 2008,我创建了一个视图,其中包含来自表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
语法可读性较差,尽管这只是个人喜好的结果。我不得不改变一些我最初的观点,但现在它开始工作了