SQL中两个记录集之间的差异

时间:2013-07-11 10:13:41

标签: sql-server-2008 tsql notin

我使用的是Microsoft SQL Server 2008,我们有两个名为应用程序注册的表。我想知道哪些应用程序未转换为注册。如下图所示。

我尝试使用NOT IN但它只适用于单列。我有2列要比较。你能告诉我最合适的方法吗?感谢。

PS。我无法更改数据库的结构,它们来自第三方供应商。

enter image description here

5 个答案:

答案 0 :(得分:3)

改为使用NOT EXISTS

SELECT StudentID, CourseID
FROM dbo.Applications a
WHERE NOT EXISTS(
    SELECT 1 FROM Enrolments e
    WHERE e.StudenID = a.StudenID 
    AND   e.CourseID = a.CourseID
)

答案 1 :(得分:3)

另一种方法,使用 except

select  
        StudentID, 
        CourseID
FROM dbo.Applications
except
select  
        StudentID, 
        CourseID
FROM dbo.Enrolments

答案 2 :(得分:2)

尝试

SELECT a.*
FROM Applications a
LEFT JOIN Enrolments e 
       ON e.StudentId = a.StudentId
      AND e.CourseId = a.CourseId
WHERE e.StudentId IS NULL

旁注:比较类似解决方案的有趣答案here

答案 3 :(得分:1)

SELECT a.* FROM Applications a
LEFT JOIN Enrolments e 
   ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL

答案 4 :(得分:1)

最简单的方法可能是应用程序和注册之间的左联接 - 只返回注册为空的

IE

SELECT a.*
FROM Applications a
LEFT JOIN Enrolments e ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL