精华内容
下载资源
问答
  • 执行这个语句后,我们可以看到现在的结果里显示的就是表中重复数据的字段。 要删除这些重复的数据,我们找出这些数据的ID,在select语句里,添加id字段,使用max函数,可以得到重复数据最后面的id。 执行结果如图...
  • Mysql删除表中重复数据,已解决

    万次阅读 2018-12-21 08:54:13
    如何快速删除数据表中重复【某个字段重复】的数据呢,比如我customer表中有一个cus_nmae字段,如果要删除cus_name字段的重复记录,且保留最小主键【这里customer的主键是cid】,首先想到的sql应该如下: DELETE ...

    如何快速删除数据表中重复【某个字段重复】的数据呢,比如我customer表中有一个cus_nmae字段,如果要删除cus_name字段的重复记录,且保留最小主键【这里customer的主键是cid】,首先想到的sql应该如下:

    DELETE
    FROM
        customer
    WHERE
        cus_name IN (
            SELECT
                cus_name
            FROM
                customer
            GROUP BY
                cus_name
            HAVING
                count(cus_name) > 1
        )
    AND cid NOT IN (
        SELECT
            min(cid)
        FROM
            customer
        GROUP BY
            cus_name
        HAVING
            count(cus_name) > 1
    );

    这样执行会报错:Err] 1093 - You can't specify target table 'customer' for update in FROM clause;原因是:更新数据时使用了查询,而查询的数据又做了更新的条件,mysql不支持这种方式。oracel和msserver都支持这种方式。怎么解决这个问题?再加一层封装,如下:

    DELETE
    FROM
        customer
    WHERE
        cus_name IN (
            SELECT
                cus_name
            FROM
                (
                    SELECT
                        cus_name
                    FROM
                        customer
                    GROUP BY
                        cus_name
                    HAVING
                        count(cus_name) > 1
                ) a
        )
    AND cid NOT IN (
        SELECT
            min(cid)
        FROM
            (
                SELECT
                    min(cid) AS cid
                FROM
                    customer
                GROUP BY
                    cus_name
                HAVING
                    count(cus_name) > 1
            ) b
    );

    执行以上这条sql语句不会再报错,并且成功删除了cus_name的所有重复记录,只保留了cid最小的那条;大功告成!

    展开全文
  • 异常意为:你不能指定目标的更新在FROM子句。傻了,MySQL 这样写,不行,让人郁闷。 难倒只能分步操作,蛋疼 以下是网友写的,同样是坑爹的代码,我机器上运行不了。 1. 查询需要删除的记录,会保留一条记录。 ...
  • MYSQL 删除表中重复数据

    万次阅读 2018-08-23 15:30:43
    test表中name字段信息有重复,想进行过滤删除重复数据 删除重复数据之后的预期结果(不考虑id):   方法一: 用 create ......select......group by ...... 先创建临时tab,新tab的数据时从test表中分组...

    test表中的原始数据:

            

    test表中name字段信息有重复,想进行过滤删除重复数据

    删除重复数据之后的预期结果(不考虑id):

              

    方法一:

    用 create ......select......group by ......

    先创建临时表tab,新表tab中的数据时从test表中分组查询出来的

    create table  tab select name ,code from test group by name

    拷贝原test的表结构为新表test1。然后删除原表test。

    drop table test

    然后查看tab表:

           

    此时tab表中的信息已经删除了重复信息(只考虑name字段的重复性)

    但是你会发现tab表中没有id,我们需要加上id,所以就将tab表中的数据插入test1中。

    用 insert into ......select ......的方法

    执行:insert into test1 select null,name,code from tab;

    执行后查看test1表中的信息:

         

    达到去删除重复数据的效果。

    最后将表test1改名为test就可以了

    alter table test1 rename to test   

    备注:insert into test1 select null,name,code from tab;

             利用mysql主键自增的特性,所以后面的select语句给id赋值为null即可。

    方法二:

    删除重复数据,保留重复数据中最小id所在行的数据

    delete from  test

    where

    name in (select pname from (select name as pname from test group by name having count(name) > 1) a)

    and

    id not in (select pid from (select min(id) as pid from test group by name having count(name) > 1 ) b)

    注意where 后面的两个条件:

    前者是查询name字段有重复值 且count >1的name值,后者是name字段有重复且count>1数据的最小id

    执行上面语句后结果:

         

    达到去重的目的,只是id不是连续的。

    此方法有一误区,错误sql语句展示如下:

    delete from  test

    where

    name in  (select name as pname from test group by name having count(name) > 1) 

    and

    id not in (select min(id) as pid from test group by name having count(name) > 1 ) 

    以上sql语句看似正确,执行后报错。

    错误信息:[Err] 1093 - You can't specify target table 'test' for update in FROM clause

     

     

    展开全文
  • 结构如下,需要增加xx,yy复合唯一索引。create table table_a (id int(11) NOT NULL AUTO_INCREMENT,xx int(11) NOT NULL,yy int(11) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8; 保留最小...

    表结构如下,需要增加xx,yy复合唯一索引。
    create table table_a (
    id int(11) NOT NULL AUTO_INCREMENT,
    xx int(11) NOT NULL,
    yy int(11) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    保留最小id
    delete a.* from table_a as a,( select min(id) id , xx,yy from table_a group by xx,yy having count(1)>1
    ) as b where a.yy=b.yy and a.xx=b.xx and a.id > b.id;

    保留最大id
    delete a.* from table_a as a,( select max(id) id , xx,yy from table_a group by xx,yy having count(1)>1
    ) as b where a.yy=b.yy and a.xx=b.xx and a.id < b.id;

    转载于:https://blog.51cto.com/liuminkun/2370360

    展开全文
  • mysql 删除表中重复数据 DELETE FROM table_name WHERE id not in(SELECT min(id) ids FROM table_name WHERE enable=1 GROUP BY bank_id) mysql中delete、update 操作,不能在同一表中查询的数据作为同一的更新...

    mysql 删除表中重复数据
    DELETE FROM table_name WHERE id not in(SELECT min(id) ids FROM table_name WHERE enable=1 GROUP BY bank_id)
    mysql中delete、update 操作,不能在同一表中查询的数据作为同一表的更新数据
    因此上方sql执行时要报错,需要对查询语句进行包装,如下:
    DELETE FROM table_name WHERE id not in(SELECT ids FROM (SELECT min(id) ids FROM table_name WHERE enable=1 GROUP BY bank_id)ts)
    执行成功

    展开全文
  • 再用python进行数据爬取的时候,把需要的字段值存入MySQL数据库,却出现了重复数据,在解决这一问题的时候遇到的坑。在此记录一下,备忘。 数据资源:链接:https://pan.baidu.com/s/14VUd5ftpUXrAz-Ka5UXk4w 提取...
  •  通常情况下,一个我们在做一个产品的时候,一开始可能由于设计考虑不周或者程序写的不够严谨,某个字段上的值产生重复了,但是又必须去掉,这个时候就稍微麻烦了一点,直接加一个 UNIQUE KEY 肯定是不行了,因为...
  • MySql 删除表中重复数据(但要保留一条)

    万次阅读 热门讨论 2018-01-19 14:18:54
    今天遇到一个问题。相同的数据在同一张表里出现了多次。...表中原始数据如下 首先我们要查看数据库那些数据重复了,执行如下SQL SELECT * FROM (SELECT COUNT(*) as num,c_1,c_2 FROM table_a GROUP
  • 像这种 删除重复数据的需求,我已经遇到过无数次了。简单总结下就是 先找出重复的记录满足的条件,然后把重复记录的id 给找出来 然后删除那些重复的id,用mysql 简单的说就是先 用where 在用group by 和 having ...
  • 一般大家也许会碰到这个问题,大家可以参考下,讲的比较详细
  • mysql清除表中重复数据 例子:我这是用户角色关联,根据用户id和角色id确认唯一一条数据 1:先查出重复数据,可以根据自己的需求更换sql的字段,或者增加条件 select a.role_id,a.USER_ACCOUNT_ID from c...
  • 今天在删除MySQL表中重复数据的时候,遇到一些问题,在这里做一些笔记。 创建一个测试create table user( id int not null primary key auto_increment, name varchar(20), password varchar(20) )为添加...
  • 主要介绍了MySQL 处理重复数据的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 主要介绍了MySQL中删除重复数据的简单方法,比起一般的NOT IN语句的效率更为高,需要的朋友可以参考下
  • 有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。 本章节我们将为大家介绍如何防止数据出现重复数据及如何删除数据表中重复数据。 防止表中...
  • 查重是我们在工作经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于MySQL查询重复数据删除重复数据保留id最小的一条为唯一数据)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...
  • MYSQL体系结构: SQL解析: 内存: 线程: 物理文件: DML: undo/redo: 内存与磁盘交互(来源网络):
  • 1、test脚本 CREATE TABLE `test` ( `id` varbinary(32) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) 2、插入数据 INSERT into test VALUES ('1','陈汇奇'); INSERT into test ...
  • 今天小编就为大家分享一篇关于shell脚本操作mysql数据库删除重复数据,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • mysql查询表里的重复数据方法

    万次阅读 2019-08-08 11:34:31
    1 2 3 4 INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test where username='qmf1' and passwd='qmf1' MySQL里查询表里的重复数据记录: 先查看重复的原始数据...
  • 我这里的方案是用存储过程:首先对有重复的name分组及查询出来,然后循环删除重复数据,相同的name只保留最大id的那一条。 下面直接上存储过程: BEGIN DECLARE v_name INT(32); DECLARE v_maxid INT(10...
  • MySQL中删除重复数据只保留一条

    万次阅读 2018-09-20 18:14:45
    用SQL语句,删除重复项只保留一条 在几千条记录里,存在着些...1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT * FROM people WHERE peopleId IN ( SELECT peopleId FROM ...
  • MySQL中经常会遇到重复数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?如何删除重复数据?我们该怎么做呢?接下来我们一步步来分析一下遇到这样的情况后,该如何处理。 初始化实验环境...
  • MySQL数据库查询重复数据 select * from employee group by emp_name having count (*)>1; Mysql 查询可以删除重复数据 select t1.* from employee t1 where (t1.emp_name) in (select t4.emp_name from ...
  • 主要为大家详细介绍了MySQL处理重复数据的实现代码,如何防止数据出现重复数据及如何删除数据表中重复数据,感兴趣的小伙伴们可以参考一下
  • MySql删除部分字段重复数据

    千次阅读 2018-07-21 16:41:47
    问题:部分字段重复,需要对部分字段重复数据,保留一条,其余删除。 1 张三 河北 12 河北唐山 2 李四 河南 20 河南郑州 3 王五 山西 10 山西太原 4 赵六 山东 31 山东济南 5 张三 河北 25...
  • MySQL数据库中删除重复记录的方法总结[推荐]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,542
精华内容 72,616
关键字:

mysql删除表中重复数据

mysql 订阅