zoukankan      html  css  js  c++  java
  • 数据库删除重复的数据并且只保留一条数据

    1、表结构与数据:

    CREATE TABLE tablezzl(
    id int,
    name VARCHAR(255)
    );

    2、查询出重复的数据:

    SELECT name FROM tablezzl GROUP BY name HAVING COUNT(name)>1

    3、查询出要保留的重复数据:

    SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(name)>1

    4、最终的SQL:

    DELETE FROM tablezzl 
    WHERE 1=1
        AND `name` in (SELECT * FROM ( (SELECT `name` `names` FROM tablezzl GROUP BY name HAVING COUNT(`name`)>1) ) a)
        AND id not in (SELECT * FROM ( (SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(`name`)>1) ) b)

    5、补充 : 

      其中这样写mysql中不能如下这样写:

    DELETE FROM tablezzl 
    WHERE 1=1
    AND `name` in (SELECT `name` `names` FROM tablezzl GROUP BY name HAVING COUNT(`name`)>1) 
    AND id not in (SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(`name`)>1) 

    会报错:You can't specify target table 'tablezzl' for update in FROM clause,不能在同一表中查询的数据作为同一表的更新数据,如模块4的SQL包装一下就可以解决。

    链接:https://www.cnblogs.com/java-zzl/p/9739750.html

  • 相关阅读:
    第八周学习进度总结
    全国(球)疫情信息可视化
    第六周学习进度总结
    手把手教你爬取B站弹幕!
    Xpath基础学习
    团队成员及选题介绍
    第五周学习进度
    课堂练习之疫情APP
    SpringMVC02
    06 | 链表(上):如何实现LRU缓存淘汰算法?
  • 原文地址:https://www.cnblogs.com/thomasbc/p/14086259.html
Copyright © 2011-2022 走看看