您的位置:首页 > 数据库 > MySQL

mysql删除重复数据

2018-03-27 14:25 246 查看
也许你在百度中找到一条sql,欣喜若狂:  (脚本之家,目前为止依然是错误的例子)
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对子语句的支持性不是太好。
问题解决:



 先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);

我为人人,人人为我;美美与共,天下大同;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: