我有一个有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。
答案 0 :(得分:2)
请尝试以下操作。
DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY Name, Name2, User)
这是未经测试的,因此可能需要进行调整。以下视频将为您提供有关此查询的更多信息。
答案 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;