本文主要和大家分享mysql实现删除重复数据,本文结合实例和大家讲解,希望能帮助到大家。
delete from `ex` where phone in (select c.phone
from `ex` as c
group by c.phone
HAVING COUNT( * ) >1) and id not in (select max(b.id) from `ex` as b group by b.phone);
注:ex(example 表名)、根据phone字段,判断是否重复。重复保留最新插入的一条(即自增id最大的)
但是,执行之后,结果不如你所愿:
/* SQL错误(1093):You can't specify target table 'ex' for update in FROM clause */
翻译:不能先select出同一表中的某些值,再update(delete)这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。
问题只针对:mysql,不包含oracle、sql server等。因为mysql对子语句的支持性不是太好。
问题解决:

51shop 由 PHP 语言开发, 使用快速的 MySQL 数据库保存数据 ,为中小型网站实现网上电子商务提供一个完美的解决方案.一、用户模块1. 用户注册:用户信息包括:用户ID、用户名、用户密码、性别、邮箱、省份、城市、 联系电话等信息,用户注册后不能立即使用,需由管理员激活账号,才可使用(此功能管理员可设置)2. 登录功能3. 资料修改:用户可修改除账号以后的所有资料4. 忘记密码:要求用
先select出的结果再通过中间表select一遍,select 的结果 起别名 就成为一个缓存的表了, 一张虚拟的表。
如图所示:就解决了mysql一条sql删除重复信息了。
为了大家方便:
DELETE FROM `ex` WHERE id NOT IN ( SELECT id FROM (SELECT max(b.id) AS id FROM `ex` b GROUP BY b.phone) b);
相关推荐:









