在不使用distinct运算符的情况下比较Sql中的行?(不同的运营商实施)

Rav*_*dag 3 sql t-sql sql-server-2008

我想比较查询结果中的两行,例如,如果第一行等于第二行.

给出表单的查询

SELECT * FROM table_name
Run Code Online (Sandbox Code Playgroud)

如果查询结果为100行,那么我们如何比较每一行是否相等.只是我对sql server如何实现感到好奇.基本上实现了Distinct运算符.只是想知道SQL服务器将如何在流程后面实现.因为它有助于更​​清楚地理解这个概念.

Ole*_*Dok 6

sql server可能使用的最简单方法 - 比较整行的散列:

SELECT CHECKSUM(*)
from YourTable
Run Code Online (Sandbox Code Playgroud)

或选择列

SELECT CHECKSUM(col1, col2, col3)
from YourTable
Run Code Online (Sandbox Code Playgroud)

如果校验和不同 - 行是不同的,但如果校验和匹配 - 它需要更仔细地检查列的确切值,但是过滤掉校验和不匹配的结果会更容易或更不容易.

检查候选人是否重复:

SELECT CHECKSUM(*)
from YourTable
GROUP BY CHECKSUM(*)
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)