直接拿1楼的来改吧,
delete from zhszty_ebook
where id not in(
select from (select max(id) from zhszty_ebook group by url
) as tmp);------------mysql有个特性,对于表进行修改,删除 *** 作,子查询不能和外层的查询的表一样,所以在加个select就可以了。其他数据库按照楼上的那个是没问题的
你要先找到规律,并且有确定的限制条件。是否所有的重复数据都删了只留一条?旧数据和新数据的界定是什么?是某个时刻?那旧数据中有重复数据删不删?重复数据是指仅仅title字段信息一样?
如果是在工作上,删除数据是一项很严谨的事,这个你必须要想清楚所有的条件情况,只是这样几句话,让网友给个sql语句,直接用上去,害的是你自己。
也不知道你的数据库具体是怎么样的,给个一般删除重复数据的方法
select
distinct
into
#Tmp_aa
from
tableName
把不重复的找出来插入到临时表
drop
table
tableName
删掉原来的表
select
into
tableName
from
#Tmp_aa
把临时表插入到新建的tableName
drop
table
#Tmp_aa
删掉临时表
方法很多,说一个最简单的。
先建一个表,结构和原来的表一样,但是在你要去重的列建立一个主键,并设置“忽略重复键”,把原表中的所有数据插入这个新表,
此时新表中的数据就已经是非重复的了。
把原表数据都删掉,把新表中的数据都导回来就ok了
表里只有两列??如果是可以这样做
1、select region,store_name into Geography_bak from Geography group by region,store_name
--去掉重复记录的数据写在一个备份表中
2、删除原表的记录。
delete from Geography
3、将没有重复记录的数据插回原表。
insert Geography select from Geography_bak
4、删除备份表
drop table Geography_bak
1、必须保证表中有主键或者唯一索引,或者某列数据不能重复。只有这样,才可能使用一句SQL来实现。否则只能考虑其它办法。下面的语句,假定BB列是不重复的,删除后保存BB列值最大的那条记录。
delete
from
表
where
aa
in
(select
aa
from
表
group
by
aa
having
count(aa)
>
1)
and
bb
not
in
(select
max(bb)
from
表
group
by
aa
having
count(aa)
>
1);
2、有多种写法:
delete
A
from
B
where
AAA
=
BAA
delete
A
from
A,B
where
AAA
=
BAA
delete
A
where
AA
in
(select
AA
from
B)
3、使用into关键字:
select
into
新表名
from
原表
4、取数据前3位,字段必须是类似char类型,使用类似substring这样的函数(SYBASE是substring,ORACLE是substr):
select
substring(字段,1,3)
from
表名
以上就是关于mysql数据库删除重复数据全部的内容,包括:mysql数据库删除重复数据、sql删除数据库中重复的数据语句怎么写、数据库中怎么删除重复的记录,只保留唯一的记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)