• 2017-05-15 12:11:57

1.在表中(表名：table 主键:id)增加一个字段rownum,类型为serial

2.执行语句：

delete from table where rownum not in(
select max(rownum) from table group by id
)

3.最后删除rownum

更多相关内容
• 第一种：新建，需停业务select distinct * from t2;create table t3 as select * from t2;create table tmp_t3 as select distinct * from t3;select * from tmp_t3;drop table t3;alter table tmp_t3 rename to ...

第一种：新建表，需停业务

select distinct * from t2;

create table t3 as select * from t2;

create table tmp_t3 as select distinct * from t3;

select * from tmp_t3;

drop table t3;

alter table tmp_t3 rename to t3;

select * from t3;

第二种：用rowid

select rowid,c1,c2 from t2;

delete from t2

where rowid <> ( select min(rowid)

from t2 b

where b.c1 = t2.c1

and b.c2 = t2.c2 )；

第三种：用rowid + group by

delete from T2

where rowid not in (select min(rowid)

from t2 group by c1,c2 );

--rowid>最小的

delete from t2

where rowid > ( select min(rowid)

from t2 b

where b.c1 = t2.c1

and b.c2 = t2.c2 )

-- not exists

delete from t2

where not exists (select 1 from (select min(rowid) rid from t2 group by c1,c2) b where b.rid=t2.rowid);

第四种：用分析函数

select c1,c2,rowid rd,row_number() over(partition by c1,c2 order by c1) rn from t2;

select b.c1,b.c2 from

(select c1,c2,rowid rd,row_number() over(partition by c1,c2 order by c1) rn

from t2) b

where b.rn = 1；

delete from t2 where rowid in

(select b.rd from

(select rowid rd,row_number() over(partition by c1,c2 order by c1) rn

from t2) b

where b.rn > 1);

或者

delete from t2 where rowid not in

(select b.rd from

(select rowid rd,row_number() over(partition by c1,c2 order by c1) rn

from t2) b

where b.rn = 1);

展开全文
• 1.将查询到的无重复数据存入临时表中 2.删除的内容 3.将临时插入到原表中 4.删除临时 理解起来是比较简单的，这里举个例子 --创建 CREATE TABLE AA( Id int, Name varchar(10) ) --为添加信息 ...

当我们需要删除表中重复的数据的时候，该如何操作呢？

具体操作分为四个步骤：

1.将查询到的无重复数据存入临时表中

2.删除原表的内容

3.将临时表插入到原表中

4.删除临时表

理解起来是比较简单的，这里举个例子

--创建表
CREATE TABLE AA(
Id int,
Name varchar(10)
)
--为表添加信息
INSERT INTO AA VALUES(1,'AAA')
INSERT INTO AA VALUES(2,'BBB')
INSERT INTO AA VALUES(1,'AAA')
INSERT INTO AA VALUES(1,'AAA')
INSERT INTO AA VALUES(2,'BBB')
--进行删除重复数据操作
--无重复查询并存入临时表
SELECT * DISTINCT INTO BB FROM AA
--删除原表
DELETE TABLE AA
--将临时表插入到原表
INSERT INTO AA SELECT * FROM BB
--删除临时表
DROP TABLE BB



最终结果

去除了多余重复的数据

展开全文
• test表中name字段信息有重复，想进行过滤删除重复数据 删除重复数据之后的预期结果（不考虑id）：   方法一： 用 create ......select......group by ...... 先创建临时tab,新tab的数据时从test表中分组...

test表中的原始数据:

test表中name字段信息有重复，想进行过滤删除重复数据

删除重复数据之后的预期结果（不考虑id）：

方法一：

用 create ......select......group by ......

先创建临时表tab,新表tab中的数据时从test表中分组查询出来的

create table  tab select name ,code from test group by name

拷贝原test的表结构为新表test1。然后删除原表test。

drop table test

然后查看tab表：

此时tab表中的信息已经删除了重复信息（只考虑name字段的重复性）

但是你会发现tab表中没有id，我们需要加上id，所以就将tab表中的数据插入test1中。

用 insert into ......select ......的方法

执行：insert into test1 select null,name,code from tab;

执行后查看test1表中的信息：

达到去删除重复数据的效果。

最后将表test1改名为test就可以了

alter table test1 rename to test

备注：insert into test1 select null,name,code from tab;

利用mysql主键自增的特性，所以后面的select语句给id赋值为null即可。

方法二：

删除重复数据，保留重复数据中最小id所在行的数据

delete from  test

where

name in (select pname from (select name as pname from test group by name having count(name) > 1) a)

and

id not in (select pid from (select min(id) as pid from test group by name having count(name) > 1 ) b)

注意where 后面的两个条件：

前者是查询name字段有重复值 且count >1的name值，后者是name字段有重复且count>1数据的最小id

执行上面语句后结果：

达到去重的目的，只是id不是连续的。

此方法有一误区，错误sql语句展示如下：

delete from  test

where

name in  (select name as pname from test group by name having count(name) > 1)

and

id not in (select min(id) as pid from test group by name having count(name) > 1 )

以上sql语句看似正确，执行后报错。

错误信息：[Err] 1093 - You can't specify target table 'test' for update in FROM clause

展开全文
• 一张表中有id和name 两个字段，查询出name重复的所有数据，现在列下： select * from xi a where (a.username) in ...2、查询出所有数据进行分组之后，和重复数据的重复次数的查询数据，先列下： select c...
• sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows from a SQL table. 本文介绍了对SQL表中重复行执行SQL删除活动的过程。 介绍 (Introduction...
• 在实际开发,有时候数据表中会有重复数据,通过sql删除重复数据,保存单条数据(ID较小的那一条记录) 需求:删除id为22.23条记录,保存18.19的记录 这是通过单模拟多删除的操作. 第一步:查询重复记录 SELECT...
• 如何快速删除数据表中重复【某个字段重复】的数据呢，比如我customer表中有一个cus_nmae字段，如果要删除cus_name字段的重复记录，且保留最小主键【这里customer的主键是cid】，首先想到的sql应该如下: DELETE ...
• Oracle删除表中重复数据有多种方法，网上较多的一种如下： delete from gljyjl jl where (jl.djbbh,jl.bgsbh) in (select djbbh,bgsbh from gljyjl group by djbbh,bgsbh having count(*) > 1) and rowid not in ...
• 在对数据库进行操作过程我们可能会遇到这种情况，表中数据可能重复出现，使我们对数据库的操作过程带来读诸多不便，那么怎么删除这些重复没有用的数据呢? 平时工作可能会遇到当试图对库表中的某一列或几列...
• 有时候我们需要删除表中的重复数据，如果手动去删除的话很慢，写sql又不会写，怎么办了，咱们可以...这样就实现了一个删除重复数据的效果哈哈哈。去重查询demo如下：select DISTINCT(name) from tbl_user_info这条s...
• 文章目录初始化实验环境明确需求查找重复的数据查找要保留的数据删除重复数据方法一方法二方法三写法1写法2总结 MySQL经常会遇到重复的数据，那么当我们遇到重复的时候的时候，如果定位哪些数据是有重复的记录？...
• 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录，重复记录是根据单个字段（Id）来判断 select * from where Id in (select Id from group byId having count(Id) > 1) 2、删除表中多余的...
• 在使用数据库时，如何删除重复数据？ 如图所示：用户（user）数据 1、输入查询语句（查询name重复数据） select * from user where name in (select name from user group by name having count(name) &...
• 1.两条数据完全一模一样(一定保证表中数据是完全一模一样,不然会误删数据) 利用 distinct 关键字过滤重复的行,将查询的结果写入临时` select distinct * into #temp from mytable 备份原 select * into ...
• #删除t_jt_contract_user表中重复数据,只保留id最小的 DELETE FROM t_jt_contract_user WHERE userIDCard IN (SELECT a.userIDCard FROM(SELECT userIDCard FROM t_jt_contract_user GROUP BY userIDCard HAVING ...
• 链表–如何从链表中删除重复数据 方法一 思路：遍历链表，将链表的数据存储到HashTable，若当前遍历的数据在HashTable存在，说明这个数据重复，可以将这个数据删除掉。 优点：时间复杂度较低。 缺点：空间...
• 关于删除mysql表中某个字段重复数据问题重复一次首先查出重复的数据删除sql几个关键点解释下：重复多次（不确定几次）首先查出重复的数据删除sql几个关键点解释下：写在最后 重复一次 首先查出重复的数据 SELECT * ...
• 用SQL语句,删除重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢？
• SQL删除重复数据只保留一条 用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录，重复记录是根据单个字段（peopleId）来判断 select *...
• 问题描述：设计一个算法从顺序表中删除重复的元素，并使剩余元素间的相对次序保持不变。 例如：原顺序为｛4 2 8 4 2 1 2 1 3 5 2｝，执行该算法后，顺序为：｛4 2 8 1 3 5｝。 另外，顺序的初始值通过调用算法...
• 由于网络阻塞,高并发造成生产环境下数据库数据重复!!! #所有的去重是将表中多于的记录去重 只有一条的保留 多条重复记录的话只保留ID最小的一个 #userrecoder的SQL去重 userrecoder学生使用记录,多个字段,...
• ## Oracle 删除重复数据

千次阅读 2021-11-30 15:09:51
1、查询重复数据 根据id分组查询，查询数量大于1的，即为有重复的数据。 select id, count() from table_name t group by t.id having(count() > 1); 2、删除重复并保留一条数据 根据id分组删除每组除了rowid...
• 一是完全重复的记录，也即所有字段均重复的记录，二是部分关键字段重复的记录，比如身份证号字段重复，而其他字段不一定重复或都重复可以忽略,毕竟我们只要保证身份证号在表中数据唯一。 解决方法: (1)完全重复的...
• 1、查找表中多余的重复记录，重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ... 1)2、删除表中多余的重复记录，重复记录是根据单个字段(peopleId)来判断，只留有rowi...
• 我们在数据库运维环境有时会出现需删除表中重复数据的情况，比如说，导入时重复导入了，这时候我们怎么办?如何删除重复的数据，保证数据的正确性和完整性？ 操作系统：中标麒麟6.0 数据库系统：DM8 我们先来...
• 今天遇到一个问题。相同的数据在同一张表里出现了多次。...表中原始数据如下 首先我们要查看数据库那些数据重复了，执行如下SQL SELECT * FROM (SELECT COUNT(*) as num,c_1,c_2 FROM table_a GROUP
• 王道数据结构上有道题，删除无序的顺序表中重复元素，提示是用散列表，自己试着实现了一下 算法设计思想 关键之处在于利用散列表的冲突来判断元素是否存在重复。于是解决散列表冲突的方式只能用拉链法，不能用开放...
• //我们经常遇到SQL Server数据重复的问题，和大家分享一下如何删除SQL Server重复数据,SQL Server重复数据有两个意义上的重复记录，一是 ...如果该需要删除重复的记录(重复记录保留1条)，可以按以下方法删除。 sel..

...