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,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as  bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where  a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id
< b.bid

2. 删除重复记录,只保留一条记录。注意,subject,RECEIVER 要索引,否则会很慢的。

 代码如下 复制代码

delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as  bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;

3. 查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

 代码如下 复制代码

select * from people

where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

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

 代码如下 复制代码

delete from people

where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)

and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

5.删除表中多余的重复记录(多个字段),只留有rowid最小的记录

 代码如下 复制代码
delete from vitae a

where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

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

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

时间: 2024-10-21 18:31:38

MySQL 删除数据库中重复数据(以部分数据为准)的相关文章

mysql记录数据库中重复的字段的数据

SELECT    SUM(co)FROM    (        SELECT            telephone,            count(telephone) AS co        FROM            noteaddress        GROUP BY            telephone        HAVING            count(telephone) > 1    ) as a

MySQL删除数据库中所有表方法

MySQL删除数据库中所有表方法技术 maybe yes 发表于2015-01-23 12:16 原文链接 : http://blog.lmlphp.com/archives/66  来自 : LMLPHP后院 通过使用 CONCAT 函数将数据库表名称和需要执行的 SQL 语句连接起来,输出在控制台:然后从控制台复制这些内容,粘贴,执行,OK.table_schema 条件为需要操作的数据库名称,参考 SQL 语句如下: SELECT CONCAT('DROP TABLE IF EXISTS 

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.subje

【转载】删除数据库中同样的两条数据中的一条

今天要修改一个离职同事写的代码,发现数据库有张表中会莫名其妙出项重复一模一样的两条数据, 由于数据不是很多想在管理工具里面手动删除算了,但是发现删除不掉,感觉像是两条数据关联起来了, 想想应该是管理工具后台逻辑估计也是用语句实现,由于没有主键,更本没法判断我要操作那条数据, 于是就报错了,我真心想吐槽一下这家伙设计的数据库真牛X. 于是就搜到了下面这篇解决方案: http://hi.baidu.com/wangzhiqing99/item/257cc01792e536afffded529

删除数据库中重复数据

数据完全一致的情况: #MySQL不支持INTO Create table temp (Select DISTINCT * from student); DROP TABLE student; Create table student (Select * from temp); DROP TABLE temp; #其他数据库 SELECT DISTINCT * INTO temp FROM student; DROP TABLE student; SELECT * INTO student FR

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; 保留最小iddelete a.* from table_a as a,( select min(id) id , xx,yy from table_a g

删除数据库中重复项

http://zhidao.baidu.com/link?url=Uzp9O1AgZFmQ8UYBYY66KOuCHiHFBqz2JLblV4npa-LF4iQt66lbONSxPyVKqr3Q4JM-udY3gjSlwG12BJyIDq

删除数据库中所有存在表的数据

create or replace function clear_table_data() returns text as $$ declare select_result record; table_name varchar; begin for select_result in select relname as tablename from pg_class c where relkind = 'r' and relname not like 'pg_%' and relname not

查找数据库中重复数据T-SQL

查找数据库中重复数据T-SQL ========第一篇========= 在一张表中某个字段下面有重复记录,有很多方法,但是有一个方法,是比较高效的,如下语句: select data_guid from adam_entity_datas a where a.rowid > (select min(b.rowid) from adam_entity_datas b where b.data_guid = a.data_guid) 如果表中有大量数据,但是重复数据比较少,那么可以用下面的语句提高