当前位置:首页 » 数据仓库 » 数据库重复数据删除
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库重复数据删除

发布时间: 2022-09-10 17:13:24

如何删除数据库中的重复记录

select
distinct
*
from
表名
distinct
表示去除重复项,必须放到列字段的前面。

sql数据库删除重复记录

delete from table where id not in

select min(id) from table group by name,url(如果有其他行辨别那么也在这里加上)
我保留的是id最小的行,你也可以留最大的行
我没办法加括号,写了子查询加了括号就发不上来

㈢ 如何删除数据库中的重复数据

有两个意义上的重复记录

①完全重复的记录,也即所有字段均重复的记录。

②部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。


1、对于第一种重复,比较容易解决,使用

selectdistinct*fromtableName


这样就可以得到无重复记录的结果集。然后通过临时表实现对数据的维护。

selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp

#Tmp为什么系统参数,tableName为要操作的表名。


2、第二类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

㈣ Mysql数据库中多条重复数据,如何只删除一条

这个需要分情况。
1,你的数据库表中有主键,且主键上面的数据为唯一值。也就是没有重复值。
那么你在删除的时候,将这个唯一值作为条件进行删除。
如:
delete
from
[表名]
where
id=1
2.所有的数据相同,那么你只能打开数据表,手工选定其中某一条,进行删除。

㈤ sql删除重复数据且只保留一条

在你的查询sql里面将子查询的title改成id,外面用id in(),这样会得到去重后的数据导出insert语句,将表中数据备份删除,再将导出的sql执行一下即可,还有一种就是写删除sql,delete from table where id not in(select id from table group by title )。

㈥ 数据库中怎么删除重复的记录,只保留唯一的记录

方法很多,说一个最简单的。
先建一个表,结构和原来的表一样,但是在你要去重的列建立一个主键,并设置“忽略重复键”,把原表中的所有数据插入这个新表,
此时新表中的数据就已经是非重复的了。
把原表数据都删掉,把新表中的数据都导回来就ok了

㈦ Oracle数据库重复数据删除的几种方法

重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。
一、删除部分字段重复数据先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
select
字段1,字段2,count(*)
from
表名
group
by
字段1,字段2
having
count(*)
>
1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除
delete
from
表名
a
where
字段1,字段2
in
(select
字段1,字段2,count(*)
from
表名
group
by
字段1,字段2
having
count(*)
>
1)
上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
CREATE
TABLE
临时表
AS
(select
字段1,字段2,count(*)
from
表名
group
by
字段1,字段2
having
count(*)
>
1)
上面这句话就是建立了临时表,并将查询到的数据插入其中。
下面就可以进行这样的删除操作了:
delete
from
表名
a
where
字段1,字段2
in
(select
字段1,字段2
from
临时表);
这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。
这个时候,大家可能会跳出来说,什么?你叫我

㈧ 如何提取出并删除数据库中重复的记录

我也想知道,于是找了下,一起看看吧
1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
select
*
from

where
Id
in
(select
Id
from

group
byId
having
count(Id)
>
1)
2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
DELETE
from

WHERE
(id)
IN
(
SELECT
id
FROM

GROUP
BY
id
HAVING
COUNT(id)
>
1)
AND
ROWID
NOT
IN
(SELECT
MIN(ROWID)
FROM

GROUP
BY
id
HAVING
COUNT(*)
>
1);
3、查找表中多余的重复记录(多个字段)
select
*
from

a
where
(a.Id,a.seq)
in(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete
from

a
where
(a.Id,a.seq)
in
(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from

group
by
Id,seq
having
count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select
*
from

a
where
(a.Id,a.seq)
in
(select
Id,seq
from

group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from

group
by
Id,seq
having
count(*)>1)

㈨ 删除数据库中重复数据的几个方法

方法一

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

方法二

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用 select distinct * from tableName 就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

㈩ mysql怎么删除重复数据

删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留最小的记录

DELETE
FROM
people
WHERE

peopleName IN (
SELECT
peopleName
FROM
people
GROUP BY
peopleName
HAVING
count(peopleName) > 1
)
AND peopleId NOT IN (
SELECT
min(peopleId)
FROM
people
GROUP BY
peopleName
HAVING
count(peopleName) > 1
)