zoukankan      html  css  js  c++  java
  • msyql 去重

    delete from userinfo where busi_id in
    (select busi_id from
    (select busi_id from userinfo group by busi_id having count(busi_id)>1) tmp1)
    and id not in
    (select id from
    (select min(id) id from userinfo group by busi_id having count(busi_id)>1) tmp2);


    无主键 添加主键再去重操作。


    DELETE FROM user WHERE id NOT IN ( SELECT temp.min_id FROM ( SELECT MIN(id) min_id FROM user GROUP BY name,age )AS temp );

    如果在设计表时没有指定主键,
    导入数据时可能出现重复导入,
    导致一个表中出现多条完全相同的多条记录。
    以下是解决这个问题的思路:

    使用distinct语句筛选出不重复的记录存入临时表tmp;
    create table tmp as (select distinct sno,sname,age,sex from s);
     
    删除原表中的数据记录
    delete from s;
     
    将临时表中的数据插入到原表。
    insert into s select * from tmp;
     
    删除临时表
    drop table tmp; 

    有一张学生表,有姓名和性别(0:女,1:男),假如我们想删除姓名和性别都相同的数据,这里介绍2中方法

    首先看一下数据表

    编号 姓名 性别
    1  王璐 0
    2  李萌 0
    3  张帅  1 
    4   李萌   0 
    5  张帅  1 
    6   刘涛   1 

    NO.1

    保留id较小的数据

    DELETE t1 FROM student t1, student t2
    WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id > t2.id

    保留id较大的数据

    DELETE t1 FROM student t1, student t2
    WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id < t2.id

    注意最后的t1.id > t2.id不要忘记,否则会删除所有的数据,操作之前一定要先备份好数据

    NO.2

    INSERT INTO student_tmp(name, sex)
    SELECT DISTINCT name, sex FROM student

    总结

    两种方法优缺点:

    方法二所需时间更短,但是方法二当主键为uuid时,需要处理一下,可将把主键设置为int自增,然后执行下面的sql就可以了。

    UPDATE student_tmp SET id = uuid()
  • 相关阅读:
    Job for vsftpd.service failed because the control process exited with error code
    Linux 调优方案, 修改最大连接数-ulimit
    vsftpd配置文件详解
    Linux下TCP最大连接数受限问题
    vsftp限制FTP用户只能访问自己的目录
    linux YUM常用 命令
    Linux 系统sudo命令
    部分有关 广告联盟作弊 与反作弊资料收集
    Boosted Tree
    如何将数据转换libsvm格式文件
  • 原文地址:https://www.cnblogs.com/Struts-pring/p/11032918.html
Copyright © 2011-2022 走看看