Sql Server里删除数据表中重复记录的例子

日期:2020-04-29编辑作者:数据库

[项目]

一、查询某个字段重复 复制代码 代码如下:
      select *
          from User u
         where u.user_name in (select u.user_name
                                 from User u
                                group by u.user_name   having count(*) > 1)

数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除!

二,删除表中某几个字段的重复

[分析]

例:表中有条六条记录。   其中张三和王五   的记录有重复
TableA
复制代码 代码如下:
id customer PhoneNo
001 张三 777777
002 李四 444444
003 王五 555555
004 张三 777777
005 张三 777777
006 王五 555555
如何写一个sql语句将TableA变成如下
001 张三 777777
002 李四 444444
003 王五 555555

1、生成一张临时表new_users,表结构与users表一样;2、对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表;如果已经有了相同的项,则忽略此条记录;3、把users表改为其它的名称,把new_users表改名为users,实现我们的需要。

测试环境

[程序]复制代码 代码如下:declare @id int,@u_name varchar(50),@u_pwd varchar(50)set @id=1

复制代码 代码如下:
create table TableA ( id varchar(3),customer varchar(5),PhoneNo varchar(6))
insert into TableA select '001','张三','777777'
union all select '002','李四','444444'
union all select '003','王五','555555'
union all select '004','张三','777777'
union all select '005','张三','777777'
union all select '006','王五','555555'

while @id1000begin if exists (select u_name from users where u_id=@id) begin select @u_name=u_name,@u_pwd=u_pwd from users where u_id=@id --获取源数据 if not exists (select u_name from new_users where u_name=@u_name) -- 判断是否有重复的U-name项 begin insert into new_users(u_name,u_pwd) values(@u_name,@u_pwd) end end set @id=@id+1end

结果

select * from new_users

复制代码 代码如下:
delete TableA from TableA Twhere

[方法二]假设Users表中有相同的name项,id为主键标识字段。现在要求去掉Users中重复的name项。

exists(
select 1fromtablea where customer=T.customer and phoneno=T.phoneno
andid < tt.id
)

1、把不重复的ID保存在一个tmp1表里面。复制代码 代码如下:select min([id]) as [id] into tmp1 from Users group by [name]2、从Users表中选取tmp1表中的id项,将相应id的数据写入表tmp2复制代码 代码如下:select * into tmp2 from Users where [id] in( select [id] from tmp1)3、把Users、tmp1两张表Drop掉复制代码 代码如下:drop table Users drop table tmp14、把tmp2表改名为User表

 

[注]如果没有主键标识id,可以增加一个标识字段,方法如下:复制代码 代码如下:select identity(int,1,1) as autoID, * into tmp0 from Users

总结

[情况三]假设有一个User表,id为主键标识字段,但有一些完全重复的项。现在要求去掉Users中这些完全重复的项,只保留一条。

该方法适用于有一个字段为自增性,例如本例中的:id

1、把不重复的数据保存在tmp1表中复制代码 代码如下:select distinct * into tmp1 from Users2、把Users表删除复制代码 代码如下:drop table Users3、把tmp1表中的数据导入到Users表复制代码 代码如下:select * into Users from tmp14、把tmp1表删除复制代码 代码如下:drop table tmp1

复制代码 代码如下:
delete 表名 from 表名 as Twhere

exists(
select 1from表名 where 字段A=T.字段A and 字段B=T.字段B,(....)
and自增列 < T.自增列
)

三,查询并删除重复记录的SQL语句

**查询及删除重复记录的SQL语句

本文由www.129028.com金沙发布于数据库,转载请注明出处:Sql Server里删除数据表中重复记录的例子

关键词:

SQL Server 2000的安全配置

SQLserver2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然。这里,我...

详细>>

如何查看某个查询用了多少TempDB空间www.129028.com金沙

DECLARE @read BIGINT, @write BIGINT; SELECT @read = SUM(num_of_bytes_read), @write = SUM(num_of_bytes_written) FROM tempdb.sys.database_files AS DBFJOI...

详细>>

浅析SQL语句中GROUP BY的用法

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM这个字段分组,那其他字...

详细>>

微软总是试图使它的软件安装尽可能地简单顺www.129028.com金沙

如果你没有特意记录安装日期,那么有没有办法从SQL Server里查询到呢?想想我们在安装的时候,肯定会有Windows认证登...

详细>>