如何从没有ID的表中删除重复(重复)记录,行[重复]

Posted

技术标签:

【中文标题】如何从没有ID的表中删除重复(重复)记录,行[重复]【英文标题】:How to delete duplicate (repetitive) records, rows from table without id [duplicate] 【发布时间】:2013-06-30 04:17:49 【问题描述】:

我对此进行了研究,发现最实用的方法是创建一个程序。程序 添加一个id,删除重复的行,最后在新形成的表中添加一个id列。我想知道,必须有一个更简单的方法。这是代码,它可以工作......

--我的桌子

create table dublicateTable
(
name varchar(30)
)

--重复插入的行

insert into dublicateTable values('Kerem')
insert into dublicateTable values('Taner')
insert into dublicateTable values('Mehmet')
insert into dublicateTable values('Serhat')

--第一种情况

select * from dublicateTable


name
-----
Kerem
Kerem
Kerem
Taner
Taner
Mehmet
Mehmet
Mehmet
Mehmet
Serhat
Serhat
Serhat

--动态形成的sql代码过程

USE [myDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[usp_delete_duplicate]
as
declare 
@add_id_text nvarchar(50),
@delete_id_text nvarchar(50),
@command_text nvarchar(100)
begin
set @add_id_text='alter table dbo.dublicateTable add id int identity(1,1)'
set @command_text='delete from dbo.dublicateTable where id not in(select min(id) from dbo.dublicateTable group by name)'
set @delete_id_text='alter table dbo.dublicateTable drop column id'
exec sp_executesql @add_id_text
exec sp_executesql @command_text
exec sp_executesql @delete_id_text
exec sp_executesql @add_id_text
end

--最终情况。它起作用了..

exec usp_delete_duplicate


select id,name from dublicateTable


id      name
---     ----
 1      Kerem
 2      Taner
 3      Mehmet
 4      Serhat

【问题讨论】:

是的,但观点不同 【参考方案1】:

CTE 可以使它更容易编写。

;with cte as (
    select
        name,
        row_number() over (partition by name order by name) row
    from
        dublicateTable
)
delete from cte where row > 1

【讨论】:

谢谢。它完美无缺。 没有必要在 cte 中包含 'name' 字段,因为它不直接在查询中使用。

以上是关于如何从没有ID的表中删除重复(重复)记录,行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除表中的重复行[重复]

如何从 SQL Server 中的表中删除重复行 [重复]

SQL语句删除重复的记录

sql数据库中出现重复行数据,如何删除这些重复记录?

如何从mysql中的表中删除重复的行

如何从SQL表中删除不是组的最大值的记录[重复]