SQL中两个记录集的区别
Posted
技术标签:
【中文标题】SQL中两个记录集的区别【英文标题】:Difference between two recordsets in TSQL 【发布时间】:2013-07-11 10:13:41 【问题描述】:我使用的是 Microsoft SQL Server 2008,我们有两个名为 Applications 和 Enrolments 的表。我想知道哪些应用程序没有转换为注册。如下图所示。
我尝试使用 NOT IN,但它仅适用于单列。我有 2 列要比较。你能告诉我什么是最合适的方法吗?谢谢。
PS。我无法更改数据库的结构,它们来自第三方供应商。
【问题讨论】:
【参考方案1】:另一种方式,使用 except
select
StudentID,
CourseID
FROM dbo.Applications
except
select
StudentID,
CourseID
FROM dbo.Enrolments
【讨论】:
【参考方案2】:改用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
)
【讨论】:
【参考方案3】:试试
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
【讨论】:
【参考方案4】:SELECT a.* FROM Applications a
LEFT JOIN Enrolments e
ON a.StudentID = e.StudentID AND a.CourseID = e.CourseID
WHERE e.StudentID IS NULL
【讨论】:
【参考方案5】:最简单的方法可能是应用程序和注册之间的左连接 - 只返回注册为空的那些
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
【讨论】:
以上是关于SQL中两个记录集的区别的主要内容,如果未能解决你的问题,请参考以下文章