1

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

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

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

在此处输入图像描述

4

5 回答 5

4

另一种方式,使用除了

select  
        StudentID, 
        CourseID
FROM dbo.Applications
except
select  
        StudentID, 
        CourseID
FROM dbo.Enrolments
于 2013-07-11T10:20:16.880 回答
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
)
于 2013-07-11T10:16:48.710 回答
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

旁注:有趣的答案在这里比较类似的解决方案

于 2013-07-11T10:16:24.317 回答
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
于 2013-07-11T10:17:41.097 回答
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
于 2013-07-11T10:19:44.997 回答