• 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,感激不尽!

  • 相关阅读:
    anaconda安装TensorFlow
    复习NLP-实战(三)
    复习NLP-实战(二)
    复习NLP-实战(一)
    python爬虫实战
    WebSocket实战(一)
    不上传图片直接本地预览
    oracle导出
    使用正则表达式验证学习成绩分数
    限制文本框,文本域输入的字符数量
  • 原文地址:https://www.cnblogs.com/zxgwork/p/4684306.html
Copyright © 2020-2023  润新知