zoukankan      html  css  js  c++  java
  • MYSQL删除重复数据

     delete from co_jobinformation c
    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,感激不尽!

  • 相关阅读:
    2019-11-4:渗透测试,bypass学习,笔记
    2019-11-3:渗透测试,基础学习,bypass类型笔记
    Linux常用命令集合
    HBase(0.96以上版本)过滤器Filter详解及实例代码
    Hadoop安全模式
    Linux学习笔记--一些错误的记录
    GUG记录
    为什么 1000 == 1000会返回false,100 == 100会返回true
    关于解决mysql数据库乱码的问题
    《MVC实现用户权限》
  • 原文地址:https://www.cnblogs.com/zxgwork/p/4684306.html
Copyright © 2011-2022 走看看