这个问题是关于SQL UNION
运算符查找重复行的内部方式 - 而不是编写我们自己的查询来比较2行.
例如,考虑我使用带有2个选择查询的联合.每个select都连接5或6个表,结果集中有10列.
问题是:如何UNION
找到重复的行?是否将select1的column1与select1的column1&select2的column2与select2的column2进行比较......?
当我在每个选择中有10列时 - 结果包含7000行(例如).
当我在select语句中有9或11列时(但是在连接/查询逻辑中没有变化) - 结果包含不同的行数,而不是7000.
任何人都可以解释,如何UNION
确定哪些行是'重复'?
注意:我使用的是SQL Server 2008.
根据Pinal Dave的说法,他有一个长期运行的博客,上面有很多关于T-SQL的很好的信息,
UNION语句有效地对结果集执行SELECT DISTINCT.如果您知道返回的所有记录都是您的联合中唯一的,请改用UNION ALL,它会提供更快的结果.
SELECT DISTINCT
将比较的瓦莱斯所有列,因此,如果任何价值的任何列不同的是,该行仍将保持,但如果所有的价值都是一样的,它会从结果中移除.有各种规则可用于比较类型略有不同的列值,并且您不能使用其中一部分列中的列类型UNION
无法转换为其他部分中相应列的类型的列.这个UNION
.