MYSQL删除重复数据
where c.name in (select cc.name from co_jobinformation cc group by cc.name having count(cc.name) > 1)
and rowid not in (select min(rowid) from co_jobinformation e group by e.name having count(e.name )>1)
之前在oracle数据库中能删除重复数据并且能保留一条唯一数据,但是相同的MySQL中就不行,
mysql有个特性,对于表进行修改,删除操作,子查询不能和外层的查询的表一样,所以在加个select就可以了
DELETE tt.*
FROM t_user tt --这是操作的表
WHERE tt.username --这是用户名重复的数据
IN(
SELECT cc.username
FROM (
SELECT b.*
FROM t_user b
) cc
GROUP BY cc.username
HAVING COUNT(cc.username) >1
)
AND tt.id --这里是保留id最小的一条,应该比较容易看懂.
NOT IN(
SELECT MIN(e.id)
FROM(
SELECT ee.*
FROM t_user ee) e
GROUP BY e.username
HAVING COUNT(e.username )>1)
)
)
刚才网上找到一种写法
select a.* from jc_informationpublic a
where a.id !=
(
select max(b.id) from jc_informationpublic b
where a.unit_name = b.unit_name
)
AND id NOT IN (SELECT min(id) FROM jc_informationpublic c GROUP BY c.unit_name HAVING COUNT(c.unit_name)>1)
也能实现效果,但是据说效率不高.
我写的有点丑,但是我想要的结果实现了,就是把上面子查询里面的表换成select查询,还请高手留下优质SQL,感激不尽!
最新文章
- 红米3 SM71.1(android-7.1.1_r6)更新发布20161229年末增强版
- CentOS忘记密码或者丢失口令解决方法
- 牛逼的OSQL----大数据导入
- GridView联表搜索,排序
- adb或appium下多设备中指定设备的启动
- Linux中tty、pty、pts的概念区别
- SRM 583 DIV1
- HTML与CSS入门——第六章 使用字体
- poj2478--欧拉函数打表
- android app 架构设计02
- Java 不使用科学计数法表示数据设置
- [Hadoop] - TaskTracker源码分析
- Kaggle新手入门之路
- 【Unity3D与23种设计模式】桥接模式(Bridge)
- DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点
- http 自定义信息头(header)设置与获取
- 关于IO的整理
- 常用的一些markdown格式
- Linux 小知识翻译 - 「端口限制」
- MariaDB基于GTID主从复制及多主复制