SQL Server中的UNION如何将一行与另一行进行比较?

SQL Server中的UNION如何将一行与另一行进行比较?,sql,sql-server,Sql,Sql Server,这个问题是关于SQL UNION操作符查找重复行的内部方法,而不是编写我们自己的查询来比较两行 例如,考虑一下,我将union与2个select查询一起使用。每个select连接5或6个表,结果集中有10列 问题是:UNION如何找到重复的行?它是否比较select1的第1列与select2的第1列以及select1的第2列与select2的第2列 当我在每个select中有10列时——例如,结果包含7000行 如果select语句中有9列或11列,但联接/查询逻辑没有变化,则结果包含不同的行数

这个问题是关于SQL UNION操作符查找重复行的内部方法,而不是编写我们自己的查询来比较两行

例如,考虑一下,我将union与2个select查询一起使用。每个select连接5或6个表,结果集中有10列

问题是:UNION如何找到重复的行?它是否比较select1的第1列与select2的第1列以及select1的第2列与select2的第2列

当我在每个select中有10列时——例如,结果包含7000行

如果select语句中有9列或11列,但联接/查询逻辑没有变化,则结果包含不同的行数,而不是7000

有人能解释一下,UNION如何确定哪些行是“重复的”

注意:我使用的是SQL Server 2008。

根据,他有一个长期运行的博客,其中有很多关于T-SQL的重要信息

UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道返回的所有记录都是来自您的union的唯一记录,请改用union all,它会提供更快的结果


SELECT DISTINCT将比较所有列的值,因此,如果任何列中的任何值不同,该行将保留,但如果所有值相同,则将从结果中删除该行。比较类型稍有不同的列值有各种规则,如果无法将联合的一部分中的列类型转换为联合的另一部分中相应列的类型,则不能使用列。

应采用逐列比较的方法。即使在关系代数中,union基本上也会逐个元素比较不同关系中的元组,以确定是否存在重复元组。看这个:英语有点不稳定:但是我在投票,因为这个问题是有效的。在这些查询中有时间戳栏吗?@Shree.Pat18。谢谢你提供的有用链接。@johndoe,我会积极地接受这个tad评论。谢谢你指出这一点。这将激励我进一步提高。非常感谢詹姆斯。这就是我想要的:-