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);
我为人人,人人为我;美美与共,天下大同;
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);
我为人人,人人为我;美美与共,天下大同;
相关文章推荐
- 在Mysql和Oracle中如何删除字段中的重复数据
- Mysql大数据表删除重复数据
- mysql 删除单表内多个字段重复的数据
- MySQL 删除数据库中重复数据方法小结
- mysql删除表数据中某个唯一字段出现重复的数据
- Mysql中查找并删除重复数据的方法
- mysql删除重复数据方法
- 删除重复数据@mysql
- mysql删除某个字段重复的数据
- MySQL删除重复数据 并保留ID最大值
- MySQL 删除数据库中重复数据方法小结
- 关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句理解
- mysql 删除表中重复数据留一条
- MYSQL删除重复数据的简单方法
- MySQL删除表中重复数据及主键重新排列
- Mysql 查询表中重复数据和删除表中重复的数据
- mysql 删除重复数据只保留一条记录
- MYSQL 删除重复数据。。
- mysql删除重复数据
- MySQL 存储过程 删除重复数据 采用limit