Rav*_*dag 3 sql t-sql sql-server-2008
我想比较查询结果中的两行,例如,如果第一行等于第二行.
给出表单的查询
SELECT * FROM table_name
Run Code Online (Sandbox Code Playgroud)
如果查询结果为100行,那么我们如何比较每一行是否相等.只是我对sql server如何实现感到好奇.基本上实现了Distinct运算符.只是想知道SQL服务器将如何在流程后面实现.因为它有助于更清楚地理解这个概念.
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)