SQL中两个记录集的区别

Posted

技术标签:

【中文标题】SQL中两个记录集的区别【英文标题】:Difference between two recordsets in TSQL 【发布时间】:2013-07-11 10:13:41 【问题描述】:

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

我尝试使用 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中两个记录集的区别的主要内容,如果未能解决你的问题,请参考以下文章

使用带有记录集的 Access VBA 和 SQL 添加和删除记录

mysql联表查询,使用phpStudy自带的

如何取SQL结果集的第一条记录

MYSQL如何查询记录集的前3条记录

错题集07

SQL 中 or 和union的区别连系是啥啊??