SQL删除几乎相同的行

时间:2013-11-21 10:02:52

标签: sql sql-server duplicates sql-delete

我有一个有5列的表,而不是更新,我已经完成了所有行的插入(愚蠢的错误)。如何摆脱重复的记录。除了id之外,它们是相同的。我无法删除所有记录,但我想删除其中一半。

离。表:

+-----+-------+--------+-------+
| id  | name  | name2  | user  |
+-----+-------+--------+-------+
|   1 | nameA | name2A | u1    |
|  12 | nameA | name2A | u1    |
|   2 | nameB | name2B | u2    |
| 192 | nameB | name2B | u2    |
+-----+-------+--------+-------+

怎么做? 我正在使用Microsoft Sql Server。

3 个答案:

答案 0 :(得分:2)

请尝试以下操作。

    DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY Name, Name2, User)

这是未经测试的,因此可能需要进行调整。以下视频将为您提供有关此查询的更多信息。

Video

答案 1 :(得分:0)

这是比@TechDo更具体的查询,因为我发现重复名称,名称2和用户不仅仅是名称。

with duplicates as
(
    select t.id, ROW_NUMBER() over (partition by t.name, t.name2, t.[user] order by t.id) as RowNumber
    from YourTable t
)

delete duplicates 
where RowNumber > 1

SQLFiddle演示自行试用:DEMO

答案 2 :(得分:-1)

请尝试:

with c as
(
    select 
        *, row_number() over(partition by name, name2, [user] order by id) as n
    from YourTable
)
delete from c
where n > 1;