===============================================

2019/7/16_第1次修改                       ccb_warlock

===============================================

接着上一个话题(https://www.cnblogs.com/straycats/p/11198340.html),做完了表结构和表内容的备份后,接着就需要删除数据。

然而在删除数据的过程中发现,存在多条相同的业务数据记录到了数据库中(表现为,除了索引字段,其他所有字段的内容完全一致)。这样就导致原本的线性增加趋势更明显,脏数据不仅浪费了空间,更影响了查询的效率。

故还是通过sql语句的处理还删除那些逻辑上重复的数据。

daily_t表结构如下:

字段名 描述
TID 索引id
USER_ID 用户id
STATS_DATE 日期

查看要删除的重复记录(在删除数据前先做查询确认范围)

SELECT *
FROM daily_t
WHERE (USER_ID, STATS_DATE) IN (
SELECT *
FROM (SELECT USER_ID, STATS_DATE
FROM daily_t
GROUP BY USER_ID, STATS_DATE
HAVING count(*) > 1) A)
AND TID NOT IN (
SELECT *
FROM (SELECT min(TID)
FROM daily_t
GROUP BY USER_ID, STATS_DATE
HAVING count(*) > 1) B)
ORDER BY USER_ID, STATS_DATE;

删除重复的记录(只留有索引最小的记录)

DELETE
FROM daily_t
WHERE (USER_ID, STATS_DATE) IN (
SELECT *
FROM (SELECT USER_ID, STATS_DATE
FROM daily_t
GROUP BY USER_ID, STATS_DATE
HAVING count(*) > 1) A)
AND TID NOT IN (
SELECT *
FROM (SELECT min(TID)
FROM daily_t
GROUP BY USER_ID, STATS_DATE
HAVING count(*) > 1) B);

PS.sql语句中之所以对子查询多嵌套了一层(select *)是为了规避mysql不支持在where中进行针对需要删除操作的表的子查询(1093-You can’t specify target table for update in FROM clause),因为多嵌套了一层(select *)后,子查询内操作的是两张临时表A、B,而不是daily_t。

mysql 删除表中多余的重复记录的更多相关文章

  1. 删除Mysql数据表中多余的重复记录的sql语句

    数据表 sniper_tb 中存在主键 id,字段url,现需要在url字段上添加 unique,但由于url存在重复记录,导致添加失败. 如何删除表中多余的url重复记录,仅保持一条? 思路一 将 ...

  2. 删除表中多余的重复记录(多个字段),只留有rowid最小的记录

    假如表Users,其中ID为自增长. ID,Name,Sex 1 张三,男 2 张三,男 3 李四,女 4 李四,女 5 王五,男 --查找出最小行号ID的重复记录 select Name,Sex,C ...

  3. 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

    delete from Resource where Title in (select Title from Resource group by Title having count(Title) & ...

  4. SqlServer查找表中多余的重复记录

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...

  5. mysql 删除表中记录

    一.清除mysql表中数据 delete from 表名;truncate table 表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...

  6. mysql删除表中的记录

    大家都知道,在MySQL中删除一个表中的记录有两种方法,一种是DELETE FROM TABLENAME WHERE... , 还有一种是TRUNCATE TABLE TABLENAME. DELET ...

  7. PHP mysql 删除表中所有数据只保留一条

    DELETE FROM `logs` WHERE wangzhi='www.juhutang.com' and id<>101072; 上面这段代码的意思为 删除表logs中 所有字段wa ...

  8. mysql删除表中重复数据,只保留一个最小的id的记录

    语句: delete from table1 where id not in (select minid from (select min(id) as minid from table1 group ...

  9. MySQL 删除表中所有数据

    方法一:使用 delete from [表名]    生成日志 方法二:使用 truncate table [表名]    无日志生成 两种方式删除后再插入数据,第一条id的值不一样 方法一: 方法二 ...

随机推荐

  1. orm-1

    - ORM什么是? 类名 ---> 数据库表 对象 ---> 记录 对象.属性 ---> 字段 - ORM的优缺点: 优点: 可跨平台,可以通过对象.属性取值,对象.方法,让该方法内 ...

  2. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  3. nginx 常用全局变量

    变量 说明 $args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2 $content_length HTTP请求信息里的" ...

  4. 在vb.net中使用委托:经理 和 员工

    现在开发的一个 vb.net系统,其中有两个窗体:alert窗体和 case窗体. 在alert窗体中列出了当前可以操作的若干个alert(可以理解为数据记录),用户可以选择将其中一个或几个alert ...

  5. Java常见集合的默认大小及扩容机制

    在面试后台开发的过程中,集合是面试的热话题,不仅要知道各集合的区别用法,还要知道集合的扩容机制,今天我们就来谈下ArrayList 和 HashMap的默认大小以及扩容机制. 在 Java 7 中,查 ...

  6. 分析WordPress数据表之用户表(功能篇)

    数据表分析 wp_users wp_usermeta 用户系统就是靠着这两张表来实现的. 具体事例分析 添加用户 添加成功后,我们会分别在wp_users及wp_usermeta表中分别看到test0 ...

  7. MyBatis(九):Mybatis Java API批量操作(增、删、改、查)

    最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...

  8. Java:JSON和Map相互转换

    Java:JSON与Map相互转换 需要jar包:jackson-core-2.6.0.jar,jackson-databind-2.6.0.jar,jackson-annotations-2.6.0 ...

  9. 两行命令查看自己笔记本连接的wifi密码

    打开cmd.exe窗口 第一行命令 netsh wlan show profiles 可以查看所有曾经连接过的wifi 第二命令 netsh wlan show profiles "vivo ...

  10. docker入门-基本概念(一)

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发 ...