用于在任何表中查找重复行的SQL查询

Ric*_*nka 5 sql t-sql

我正在寻找一个与模式无关的查询.也就是说,如果我有一个users表或一个purchases表,那么查询应该能够同时捕获任一表中的重复行而不进行任何修改(from当然除了子句).

我正在使用T-SQL,但我猜应该有一个通用的解决方案.

Tom*_*m H 8

我相信这对你有用.请记住,CHECKSUM()不是100%完美 - 理论上可以在这里得到误报(我认为),但是否则你可以改变表名,这应该有效:

;WITH cte AS (
    SELECT
        *,
        CHECKSUM(*) AS chksum,
        ROW_NUMBER() OVER(ORDER BY GETDATE()) AS row_num
    FROM
        My_Table
)
SELECT
    *
FROM
    CTE T1
INNER JOIN CTE T2 ON
    T2.chksum = T1.chksum AND
    T2.row_num <> T1.row_num
Run Code Online (Sandbox Code Playgroud)

ROW_NUMBER()是必要的,以便您有一些区分行的方法.它需要一个ORDER BY并且不能是一个常数,所以GETDATE()我的解决方法也是如此.

只需更改CTE中的表名称即可,无需拼写列.