我正在使用 Microsoft SQL Server 2008,我们有两个名为Applications和Enrollments的表。我想知道哪些应用程序没有转换为注册。如下图所示。
我尝试使用 NOT IN,但它仅适用于单列。我有 2 列要比较。你能告诉我什么是最合适的方法吗?谢谢。
PS。我无法更改数据库的结构,它们来自第三方供应商。
我正在使用 Microsoft SQL Server 2008,我们有两个名为Applications和Enrollments的表。我想知道哪些应用程序没有转换为注册。如下图所示。
我尝试使用 NOT IN,但它仅适用于单列。我有 2 列要比较。你能告诉我什么是最合适的方法吗?谢谢。
PS。我无法更改数据库的结构,它们来自第三方供应商。
另一种方式,使用除了
select
StudentID,
CourseID
FROM dbo.Applications
except
select
StudentID,
CourseID
FROM dbo.Enrolments
改用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
)
尝试
SELECT a.*
FROM Applications a
LEFT JOIN Enrolments e
ON e.StudentId = a.StudentId
AND e.CourseId = a.CourseId
WHERE e.StudentId IS NULL
旁注:有趣的答案在这里比较类似的解决方案
SELECT a.* FROM Applications a
LEFT JOIN Enrolments e
ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL
最简单的方法可能是应用程序和注册之间的左连接 - 只返回注册为空的那些
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