【问题标题】:Delete Duplicate rows from table which have same Id从表中删除具有相同 ID 的重复行
【发布时间】:2019-12-06 23:39:25
【问题描述】:

我有一个表 Emp 有这样的记录

Id     Name
1      A
2      B
3      C
1      A
1      A
2      B
3      C

现在我想从表中删除重复的行 我正在使用此查询来选择或计算重复记录的数量

SELECT NameCol, COUNT(*) as TotalCount FROM TestTable 
GROUP BY NameCol HAVING COUNT(*) > 1 
ORDER BY COUNT(*) DESC

我应该写什么查询来从表中删除重复的行。

如果我编写此查询以删除重复记录,那么它会给出 (0) row Affected 结果。

`DELETE FROM TestTable 
    WHERE ID NOT IN ( SELECT MAX(ID) FROM 
                                     TestTable 
                                     GROUP BY NameCol
                    )`

【问题讨论】:

  • 您只想删除它们,或者您想使用获取不同记录的计数?后者可以使用 distinct 关键字

标签: sql sql-server sql-server-2008


【解决方案1】:

对于 sqlserver 2005+

测试数据:

declare @t table(Id int, Name char(1))
insert @t values
(1,'A'),(2,'B'),(3,'C'),(1,'A'),(1,'A'),(2,'B'),(3,'C')

删除语句(将 @t 替换为您的 Emp 表)

;with a as
(
select row_number() over (partition by id, name order by id) rn
from @t
)
delete from a where rn > 1

select * from @t

【讨论】:

    【解决方案2】:
    **Q How to Remove duplicate data with help of Rowid**   
    
    
    create table abcd(id number(10),name varchar2(20))
    
    insert into abcd values(1,'abc')
    
    insert into abcd values(2,'pqr')
    
    
    insert into abcd values(3,'xyz')
    
    insert into abcd values(1,'abc')
    
    insert into abcd values(2,'pqr')
    
    insert into abcd values(3,'xyz')
    
    
    select * from abcd
    
    id  Name
    1   abc
    2   pqr
    3   xyz
    1   abc
    2   pqr
    3   xyz
    
    Delete Duplicate record but keep Distinct Record in table 
    
    DELETE 
    FROM abcd a
    WHERE ROWID > (SELECT MIN(ROWID) FROM abcd b
    WHERE b.id=a.id
    );
    
    run the above query 3 rows delete 
    
    select * from abcd
    
    id  Name 
    1   abc
    2   pqr
    3   xyz
    

    【讨论】:

    • ROWID 是 Oracle-only,而这个问题是关于 Sql Server - 查看标签。
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2020-03-14
    • 2012-01-25
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多