mysql删除表中重复数据创建唯一索引。

表结构如下,需要增加xx,yy复合唯一索引。
create table table_a (
id int(11) NOT NULL AUTO_INCREMENT,
xx int(11) NOT NULL,
yy int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

保留最小id
delete a.* from table_a as a,( select min(id) id , xx,yy from table_a group by xx,yy having count(1)>1
) as b where a.yy=b.yy and a.xx=b.xx and a.id > b.id;

保留最大id
delete a.* from table_a as a,( select max(id) id , xx,yy from table_a group by xx,yy having count(1)>1
) as b where a.yy=b.yy and a.xx=b.xx and a.id < b.id;

原文地址:https://blog.51cto.com/liuminkun/2370360

时间: 2024-08-04 06:38:46

mysql删除表中重复数据创建唯一索引。的相关文章

MySQL 删除数据库中重复数据(以部分数据为准)

delete from zqzrdp where tel  in (select min(dpxx_id) from  zqzrdp  group by tel  having count(tel)>1); 执行,报错 异常意为:你不能指定目标表的更新在FROM子句.傻了,MySQL 这样写,不行,让人郁闷. 难倒只能分步操作,蛋疼 以下是网友写的,同样是坑爹的代码,我机器上运行不了. 1. 查询需要删除的记录,会保留一条记录.  代码如下 复制代码 select a.id,a.subject,

sqlite 删除表中重复数据(亲测可用)

例子:表名  Paper .通过字段PaperID查找重复数据. 1 --查询某表中重复的数据       select * from Paper group by PaperID having count(*)>1; 2--删除重复行数,只剩不重复的记录(rowid为sqlite自带字段)      delete from Paper where Paper.rowid not in (select MAX(Paper.rowid) from Paper group by PaperID);

PHP mysql 删除表中所有数据只保留一条

DELETE FROM `logs` WHERE wangzhi='www.juhutang.com' and id<>101072; 上面这段代码的意思为 删除表logs中 所有字段wangzhi含内容为www.juhutang.com的数据.但是不删除同表中 id 是101072 的这条数据. 当然了 我是新手,这条语句可能与标题不是那么完善, 希望大牛解答,删除表中所有数据,保留最近的一条 或者说只保留主键ID最大的一条. 这语句如何写. PHP mysql 删除表中所有数据只保留一条

MySQL 数据库删除表中重复数据

采集数据的时候,由于先期对页面结构的分析不完善,导致采漏了一部分数据.完善代码之后重新运行 Scrapy,又采集了一些重复的数据,搜了下删除重复数据的方法. N.B. 删除数据表的重复数据时,请先备份数据表. 方法一 # 保留主键 ID 较小的那条记录 DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name # 保留主键 ID 较大的那条记录 DELETE n1 FROM names n1, name

【ORACLE】删除表中重复数据

原因 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 处理方法 重复的数据可能有这样两种情况: 第一种:删除表中所有重复的数据 第二种:只保留重复数据中最新记录的一条记录[工作中常用] 删除重复数据的想法 每一行数据所对应的rowid都是独一无二的,及时表中两个数据

查询和删除表中重复数据sql语句

  1.查询表中重复数据.select * from peoplewhere peopleId in (select   peopleId   from   people   group   by   peopleId   having   count(peopleId) > 1)2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录delete from people where peopleId   in (select   peopleId

SQL Server中删除表中重复数据

方法一:利用游标,但要注意主字段或标识列 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 row

删除表中重复数据,只删除重复数据中ID最小的

delete t_xxx_user where recid in ( select recid from t_xxx_user where recid in ( select min(recid) from t_sz_grid_forecast_user where ddatetime = to_date('2019-12-17 16:00:00','yyyy-MM-dd hh24:mi:ss') and forecaster = 'XXX'  group by venueid,ybsx hav

数据库处理表中重复数据方法

--查询表中重复数据 select * from 表名 t where t.id in ( SELECT id FROM 表名 GROUP BY id HAVING COUNT(主键编号)>1 ); --去除表中重复数据 delete from 表名 a where rowid not in ( select max(b.rowid) from 表名 b where a.主键编号 = b.主键编号 );数据库处理表中重复数据方法,布布扣,bubuko.com