删除表中的重复行

时间:2015-11-08 12:53:09

标签: sql sql-server duplicates sql-delete

我编写了一个查询来查找表中的重复行。它会输出重复对(例如row: 1,2之后,您会发现row: 2,1

SELECT m1.ID, m2.ID
FROM AccessLog_Manual m1
    INNER JOIN AccessLog_Manual m2 ON 
        m1.ACCESS = m2.ACCESS AND 
        m1.EMPLOYEEID = m2.EMPLOYEEID AND
        m1.LOGDATETIME = m2.LOGDATETIME AND
        m1.MORPHOACCESSID = m2.MORPHOACCESSID AND
        m1.ID <> m2.ID
ORDER BY m1.ID

现在我想在delete语句中使用此查询,这样只删除 一行对。 (例如row 1,2row 2,1,只删除1并让2未删除)

1 个答案:

答案 0 :(得分:0)

您可以使用row_number()为您认为重复的行分配数字。大于1的数字表示该行是重复的。

例如:

; with  numbered as
        (
        select  row_number() over (
                    partition by ACCESS, EMPOYEEID, LOGDATETIME, MORPHOACCESSID
                    order by ID) as rn
        ,       *
        from    AccessLog_Manual
        )
delete  numbered
where   rn > 1;

See it working at SQL Fiddle.