如何删除 SQL Server 表中的重复行(2)

来源:互联网 发布:qq自动回复软件 编辑:程序博客网 时间:2024/05/17 22:57
思想:新增一列标识列ID,按某一字段进行分组,保留改组中ID值最小的记录,其余的删除。
    1.首先创建测试数据表

create table testData(stuNum varchar(20),stuName varchar(20),class varchar(20),age int,sex varchar(2))insert into testDataselect '200810405325','杨宏','计科083',22,'男' union allselect '200810405326','刘华','土木082',24,'男' union allselect '200810405326','刘华','土木082',24,'男' union allselect '200810405328','张叶','会计088',23,'女' union allselect '200810405343','罗雯','建筑085',22,'女' union allselect '200810405343','罗雯','建筑085',22,'女' union allselect '200810405343','罗雯','建筑085',22,'女' union allselect '200810405356','孟兴','桥梁081',25,'男'

      可以看出有两个刘华、三个罗雯,而且其信息一模一样,表中存在重复数据,我们只保留一个。    2.修改表结构,增加一个标识列id

alter table testData add ID int identity(1,1)
    现在我们来看一下表结构:

select * from testData with(nolock)/*stuNum               stuName              class                age         sex  ID-------------------- -------------------- -------------------- ----------- ---- -----------200810405325         杨宏                   计科083                22          男    1200810405326         刘华                   土木082                24          男    2200810405326         刘华                   土木082                24          男    3200810405328         张叶                   会计088                23          女    4200810405343         罗雯                   建筑085                22          女    5200810405343         罗雯                   建筑085                22          女    6200810405343         罗雯                   建筑085                22          女    7200810405356         孟兴                   桥梁081                25          男    8*/
    3.现在我们来删除其中的重复数据,其思想是按照stuNum进行分组,选出每组中ID值最小的记录保留,其余重复的删除。

delete from testData where ID not in(  select MIN(ID) from testData group by stuNum)

 我们再来看一下现在表中的数据:重复数据被删除了。

select * from testData with(nolock)stuNum               stuName              class                age         sex  ID-------------------- -------------------- -------------------- ----------- ---- -----------200810405325         杨宏                   计科083                22          男    1200810405326         刘华                   土木082                24          男    2200810405328         张叶                   会计088                23          女    4200810405343         罗雯                   建筑085                22          女    5200810405356         孟兴                   桥梁081                25          男    8
    4.最后记得删掉之前增加的标识列id

alter table testData drop column ID

这种方法适合于没有主键,数据表中可以重复插入数据的情况。即重复数据所有对应字段都一样。

	
				
		
原创粉丝点击