精华内容
下载资源
问答
  • MySQL删除重复数据行,只保留一条 ? ? delimiter $$CREATE TABLE `devices_all` ( `device_all_id` int(11) NOT NULL AUTO_INCREMENT, `device_id` varchar(512) DEFAULT NULL, `device_token` varchar(512) DEFAULT...

    MySQL删除重复数据行,只保留一条 ? ? delimiter $$CREATE TABLE `devices_all` ( `device_all_id` int(11) NOT NULL AUTO_INCREMENT, `device_id` varchar(512) DEFAULT NULL, `device_token` varchar(512) DEFAULT NULL, `client_agent` varchar(512) DEFAU

    MySQL删除重复数据行,只保留一条

    ?

    ?

    delimiter $$

    CREATE TABLE `devices_all` (

    `device_all_id` int(11) NOT NULL AUTO_INCREMENT,

    `device_id` varchar(512) DEFAULT NULL,

    `device_token` varchar(512) DEFAULT NULL,

    `client_agent` varchar(512) DEFAULT NULL,

    `create_time` datetime DEFAULT NULL,

    PRIMARY KEY (`device_all_id`)

    ) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=latin1$$

    ?

    表名devices_all,判重列device_id。?

    ?

    delete from devices_all

    where device_id in (select device_id from (select device_id from devices_all a group by a.device_id having count(a.device_id) > 1) as a)

    and device_all_id not in (select device_all_id from (select min( device_all_id) device_all_id from devices_all group by device_id having count( device_id)>1) as b)

    ?

    f68f2add0b68e4f9810432fce46917b7.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • oracle删除重复

    2021-05-04 04:23:07
    需求:当多行tid重复时,保留tid小的的,其他重复行删除。原书数据:select t.*,t.rowid from test12 t;TID TNAME TTIME SSEX ROWID11 12 AAAMP+AAEAAAAC0AAA111 ...

    需求:当多行tid重复时,保留tid小的的行,其他重复的行删除。

    原书数据:

    select t.*,t.rowid from test12 t;

    TID        TNAME        TTIME        SSEX        ROWID

    11        12                                      AAAMP+AAEAAAAC0AAA

    111        1a2                                     AAAMP+AAEAAAAC0AAB

    21        2121                    2012-11-13 15:30:45                AAAMP+AAEAAAAC0AAC

    21        2121                    2012-11-13 15:41:18        男        AAAMP+AAEAAAAC0AAD

    23        2121                    2012-11-13 15:41:31        女        AAAMP+AAEAAAAC0AAE

    23        2121                    2012-11-13 15:41:48        nv        AAAMP+AAEAAAAC0AAF

    实现:通过rowid

    select s.tid,min(s.rowid) from test12 s,test12 t where t.tid=s.tid group by s.tid;

    11        AAAMP+AAEAAAAC0AAA

    21        AAAMP+AAEAAAAC0AAC

    23        AAAMP+AAEAAAAC0AAE

    111        AAAMP+AAEAAAAC0AAB

    select s.tid,s.rowid from test12 s,test12 t where s.rowid>t.rowid and t.tid=s.tid;

    21        AAAMP+AAEAAAAC0AAD

    23        AAAMP+AAEAAAAC0AAF

    select s.tid,s.rowid from test12 s,test12 t where s.rowid

    21        AAAMP+AAEAAAAC0AAC

    23        AAAMP+AAEAAAAC0AAE

    删除方法一:成功!

    delete test12 t where t.rowid not in (select min(s.rowid) from test12 s where t.tid=s.tid group by s.tid);----如果是保留最大的唯一行,换max即可。

    TID        TNAME        TTIME        SSEX        ROWID

    11        12                                      AAAMP+AAEAAAAC0AAA

    111        1a2                                     AAAMP+AAEAAAAC0AAB

    21        2121                    2012-11-13 15:30:45                AAAMP+AAEAAAAC0AAC

    23        2121                    2012-11-13 15:41:31        女        AAAMP+AAEAAAAC0AAE

    删除方法二:失败!

    delete test12 t where t.rowid in (select s.rowid from test12 s where s.tid=t.tid and s.rowid>t.rowid);

    解:

    由于这个例子的特殊性,所以select s.tid,s.rowid from test12 s,test12 t where s.rowid>t.rowid and t.tid=s.tid;

    select s.tid,s.rowid from test12 s,test12 t where s.rowid

    测试:

    insert into test12 values(23,'fsf',sysdate,'F');

    insert into test12 values(23,'fsf',sysdate,'M');

    select t.*,t.rowid from test12 t;

    TID        TNAME        TTIME        SSEX        ROWID

    11        12                                      AAAMP+AAEAAAAC0AAA

    111        1a2                                     AAAMP+AAEAAAAC0AAB

    21        2121                    2012-11-13 15:30:45                AAAMP+AAEAAAAC0AAC

    21        2121                    2012-11-13 15:41:18        男        AAAMP+AAEAAAAC0AAD

    23        2121                    2012-11-13 15:41:31        女        AAAMP+AAEAAAAC0AAE

    23        2121                    2012-11-13 15:41:48        nv        AAAMP+AAEAAAAC0AAF

    23        fsf                     2012-11-14 10:09:14        F         AAAMP+AAEAAAAC2AAA

    23        fsf                     2012-11-14 10:11:50        M         AAAMP+AAEAAAAC2AAB

    错误结果一:

    select s.tid,s.rowid from test12 s,test12 t where s.rowid>t.rowid and t.tid=s.tid;

    21        AAAMP+AAEAAAAC0AAD

    23        AAAMP+AAEAAAAC2AAB

    23        AAAMP+AAEAAAAC2AAA

    23        AAAMP+AAEAAAAC0AAF

    23        AAAMP+AAEAAAAC2AAB

    23        AAAMP+AAEAAAAC2AAA

    23        AAAMP+AAEAAAAC2AAB

    错误结果二:

    select s.tid,s.rowid from test12 s,test12 t where s.rowid

    21        AAAMP+AAEAAAAC0AAC

    23        AAAMP+AAEAAAAC0AAE

    23        AAAMP+AAEAAAAC0AAF

    23        AAAMP+AAEAAAAC0AAE

    23        AAAMP+AAEAAAAC2AAA

    23        AAAMP+AAEAAAAC0AAF

    23        AAAMP+AAEAAAAC0AAE

    由于是比较,两个表,以笛卡尔积的方式,进行对比,取小的rowid(错误二的例子),首选s表的第一行(tid为23第一行)AAAMP+AAEAAAAC0AAE

    与t表的第一比较,相等,无结果;与第二行,第三行,第四行(tid为23的四行),均最小,则,有三条结果;然后s表的第二行开始比较,比t表的第一行大,与第二行相等,比第三、四行相等,则有两条结果;然后s表的第三行,再去比较,比t表的第一、二行都大,与第三行相等,比第四行小,所以一条结果;s表第四行比t表第一、二、三行都大,与第四行相等,所以无结果。综上所述,最终结果(无序的)为:

    21        AAAMP+AAEAAAAC0AAC

    23        AAAMP+AAEAAAAC0AAE

    23        AAAMP+AAEAAAAC0AAF

    23        AAAMP+AAEAAAAC0AAE

    23        AAAMP+AAEAAAAC2AAA

    23        AAAMP+AAEAAAAC0AAF

    23        AAAMP+AAEAAAAC0AAE

    补充:如果要指定删除重复(tid)行为4(N)行以上的,保留最小的行,其他的删除。

    则在where后增加rowid not in (select min(rowid) from test12 group by tid having count(*) >4) and tid in (select tid from test12 group by tid having count(*) >4);这种方法更加灵活,可以实现的功能更多。

    展开全文
  • 准备示例数据以下sql创建表,并将示例数据插入到用于演示的contacts表中。CREATE TABLE contacts (id INT PRIMARY KEY AUTO_INCREMENT,first_val VARCHAR(50) DEFAULT NULL,last_val VARCHAR(50) DEFAULT NULL,email...

    准备示例数据

    以下sql创建表,并将示例数据插入到用于演示的contacts表中。

    CREATE TABLE contacts (

    id INT PRIMARY KEY AUTO_INCREMENT,

    first_val VARCHAR(50) DEFAULT NULL,

    last_val VARCHAR(50) DEFAULT NULL,

    email VARCHAR(255) NOT NULL

    );

    INSERT INTO contacts (first_val,last_val,email)

    VALUES ('Carine ','Schmitt','carine.schmitt@yiibai.com'),

    ('Zbyszek ','Piestrzeniewicz','zbyszek.piestrzeniewicz@att.com'),

    ('Roland','Keitel','roland.keitel@yahoo.com'),

    ('Julie','Murphy','julie.murphy@yahoo.com'),

    ('Kwai','Lee','kwai.lee@google.com'),

    ('Jean','King','jean.king@qq.com'),

    ('Susan','Nelson','susan.nelson@qq.com'),

    ('Jean','King','jean.king@gmail.com'),

    ('Peter','Ferguson','peter.ferguson@google.com'),

    ('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),

    ('Janine ','Labrune','janine.labrune@qq.com'),

    ('Susan','Nelson','susan.nelson@qq.com'),

    ('Janine ','Labrune','janine.labrune@qq.com'),

    ('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),

    ('Janine ','Labrune','janine.labrune@qq.com'),

    ('Susan','Nelson','susan.nelson@qq.com'),

    ('Roland','Keitel','roland.keitel@yahoo.com');

    方式一 克隆表删除重复的行

    以下是使用克隆/复制表删除重复行的步骤

    克隆需要删除重复数据的表 ,其结构与要删除重复行的原始表相同。

    将原始表中的不同行插入直接表。

    删除原始表或修改原始表名并将克隆表重命名为原始表。

    例如,以下语句从contacts表中删除具有重复电子邮件(email)的行记录:

    -- step1 克隆/复制表结构

    CREATE TABLE contacts_temp LIKE contacts;

    -- step2 数据不重复插入克隆表

    INSERT INTO contacts_temp(first_val,last_val,email) SELECT first_val,last_val,email FROM contacts GROUP BY email;

    -- step3 修改原始表以作备份,出错可以还原

    ALTER TABLE contacts

    RENAME TO contacts_copy;

    -- step4 修改原始表为克隆表

    ALTER TABLE contacts_temp

    RENAME TO contacts;

    方式二 DELETE JOIN 删除重复行

    以下查询返回contacts表中的重复email值:

    SELECT

    email,

    COUNT( email )

    FROM

    contacts

    GROUP BY

    email

    HAVING

    COUNT( email ) > 1;

    可以看到,表中有重复email行记录。

    使用DELETE JOIN语句删除重复的行

    MySQL提供了可用于快速删除重复行的DELETE JOIN语句。

    以下语句删除重复的行并保持最高的ID:

    DELETE t1

    FROM

    contacts t1

    INNER JOIN contacts t2

    WHERE

    t1.id < t2.id

    AND t1.email = t2.email;

    重复行记录已被删除。我们再次执行查找重复的电子邮件的查询:

    SELECT

    email, COUNT( email )

    FROM

    contacts

    GROUP BY

    email

    HAVING

    COUNT( email ) > 1;

    该查询返回一个空集合,这意味着重复的行已被删除。

    展开全文
  • 本节内容:查找并删除重复行的方法。一,如何查找重复行第一步是定义什么样的才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。...

    本节内容:

    查找并删除重复行的方法。

    一,如何查找重复行

    第一步是定义什么样的行才是重复行。

    多数情况下很简单:它们某一列具有相同的值。

    本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。

    要用到的数据样本:

    复制代码 代码示例:

    create table test(id int not null primary key, day date not null);

    insert into test(id, day) values(1, '2006-10-08');

    insert into test(id, day) values(2, '2006-10-08');

    insert into test(id, day) values(3, '2006-10-09');

    select * from test;

    +----+------------+

    | id | day        |

    +----+------------+

    |  1 | 2006-10-08 |

    |  2 | 2006-10-08 |

    |  3 | 2006-10-09 |

    +----+------------+

    前面两行在day字段具有相同的值,因此如何将他们当做重复行,这里有一查询语句可以查找。

    查询语句使用GROUP BY子句把具有相同字段值的行归为一组,然后计算组的大小。

    例句:

    复制代码 代码示例:

    select day, count(*) from test GROUP BY day;

    +------------+----------+

    | day        | count(*) |

    +------------+----------+

    | 2006-10-08 |        2 |

    | 2006-10-09 |        1 |

    +------------+----------+

    重复行的组大小大于1。

    如何希望只显示重复行,必须使用HAVING子句,比如:

    复制代码 代码示例:

    select day, count(*) from test group by day HAVING count(*) > 1;

    +------------+----------+

    | day        | count(*) |

    +------------+----------+

    | 2006-10-08 |        2 |

    +------------+----------+

    基本的技巧:根据具有相同值的字段分组,然后知显示大小大于1的组。

    二,为什么不能使用WHERE子句?

    因为WHERE子句过滤的是分组之前的行,HAVING子句过滤的是分组之后的行。

    三,如何删除重复行

    一个常见的任务是,重复行只保留一行,其他删除,然后可以创建适当的索引,防止以后再有重复的行写入数据库。

    同样,首先是弄清楚重复行的定义。

    要保留的是哪一行呢?第一行,或者某个字段具有最大值的行?

    本文中,假设要保留的是第一行——id字段具有最小值的行,意味着你要删除其他的行。

    也许最简单的方法是通过临时表。

    尤其对于MYSQL,有些限制是不能在一个查询语句中select的同时update一个表。

    在另一篇文章 MySQL SELECT同时UPDATE同一张表 中,讲述了如何绕过这些限制。

    简单起见,这里只用到了临时表的方法。

    任务:删除所有重复行,除了分组中id字段具有最小值的行。

    因此,需要找出大小大于1的分组,以及希望保留的行。

    可以使用MIN()函数。这里的语句是创建临时表,以及查找需要用DELETE删除的行。

    例句:

    复制代码 代码示例:

    create temporary table to_delete (day date not null, min_id int not null);

    insert into to_delete(day, min_id)

    select day, MIN(id) from test group by day having count(*) > 1;

    select * from to_delete;

    +------------+--------+

    | day        | min_id |

    +------------+--------+

    | 2006-10-08 |      1 |

    +------------+--------+

    有了这些数据,可以开始删除“脏数据”行了。

    可以有几种方法,各有优劣,这里不做详细比较,只是说明在支持查询子句的关系数据库中,使用的标准方法。

    例句:

    复制代码 代码示例:

    delete from test

    where exists(

    select * from to_delete

    where to_delete.day = test.day and to_delete.min_id <> test.id

    )

    四,如何查找多列上的重复行

    有人问过以下的问题:

    一个表上有两个字段b和c,分别关联到其他两个表的b和c字段。我想要找出在b字段或者c字段上具有重复值的行。

    咋看很难明白,通过对话后我理解了:他想要对b和c分别创建unique索引。

    如上所述,查找在某一字段上具有重复值的行很简单,只要用group分组,然后计算组的大小。

    并且查找全部字段重复的行也很简单,只要把所有字段放到group子句。但如果是判断b字段重复或者c字段重复,问题困难得多。

    提问者用到的样本数据:

    复制代码 代码示例:

    create table a_b_c(

    a int not null primary key auto_increment,

    b int,

    c int

    );

    insert into a_b_c(b,c) values (1, 1);

    insert into a_b_c(b,c) values (1, 2);

    insert into a_b_c(b,c) values (1, 3);

    insert into a_b_c(b,c) values (2, 1);

    insert into a_b_c(b,c) values (2, 2);

    insert into a_b_c(b,c) values (2, 3);

    insert into a_b_c(b,c) values (3, 1);

    insert into a_b_c(b,c) values (3, 2);

    insert into a_b_c(b,c) values (3, 3);

    现在,可以轻易看到表里面有一些重复的行,但找不到两行具有相同的二元组{b, c}。这就是为什么问题会变得困难了。

    2,错误的查询语句

    如果把两列放在一起分组,你会得到不同的结果,具体看如何分组和计算大小。

    提问者恰恰是困在了这里。有时候查询语句找到一些重复行却漏了其他的。

    这是他用到的查询:

    复制代码 代码示例:

    select b, c, count(*) from a_b_c

    group by b, c

    having count(distinct b > 1)

    or count(distinct c > 1);

    结果返回所有的行,因为CONT(*)总是1.为什么?因为 >1 写在COUNT()里面。

    这个错误很容易被忽略,事实上等效于:

    复制代码 代码示例:

    select b, c, count(*) from a_b_c

    group by b, c

    having count(1)

    or count(1);

    为什么?因为(b > 1)是一个布尔值,根本不是想要的结果。

    需要的是:

    复制代码 代码示例:

    select b, c, count(*) from a_b_c

    group by b, c

    having count(distinct b) > 1

    or count(distinct c) > 1;

    返回空结果。

    很显然,因为没有重复的{b,c}。

    这人试了很多其他的OR和AND的组合,用来分组的是一个字段,计算大小的是另一个字段,像这样:

    复制代码 代码示例:

    select b, count(*) from a_b_c group by b having count(distinct c) > 1;

    +------+----------+

    | b    | count(*) |

    +------+----------+

    |    1 |        3 |

    |    2 |        3 |

    |    3 |        3 |

    +------+----------+

    没有一个能够找出全部的重复行。

    而且,对于某些情况,这种语句是有效的,如果错误地以为就是这么写法,然而对于另外的情况,很可能得到错误结果。

    事实上,单纯用GROUP BY 是不可行的。

    为什么?

    因为当对某一字段使用group by时,就会把另一字段的值分散到不同的分组里。

    对这些字段排序可以看到这些效果,正如分组做的那样。

    展开全文
  • mysql 删除重复行数据

    2021-01-19 04:33:41
    这种在mysql里是不支持的,会报“You can't specify target table 'people' for update in FROM clause” 的错误(应该是由于mysql在删除的时候加了锁,具体是行锁还是别的锁暂时没有查清楚)。所以修改了上面的语句...
  • 使用python删除excel表格重复行。# 导入pandas包并重命名为pdimport pandas as pd# 读取Excel中Sheet1中的数据data = pd.DataFrame(pd.read_excel('test.xls', 'Sheet1'))# 查看读取数据内容print(data)# 查看是否有...
  • 概括:在这个教程中,你将会学到多种用在 MySQL 中的删除重复行的方法。一、准备样本数据为了便于演示,我们用下面的脚本创建了表 contacts,并向其中插入了一些样本数据。DROP TABLE IF EXISTS contacts;CREATE ...
  • 本指南将引导您完成如何在MySQL中删除重复值的过程。先决条件安装了MySQL的系统 MySQL root用户帐户 访问终端窗口/命令行(Ctrl-Alt-T,“搜索”>“终端”) 设置测试数据库如果您已经可以使用MySQL数据库,请...
  • pandas删除数据中的重复数据行、基于dataframe所有列删除重复、基于特定数据列或者列的作何删除重复删除重复并保留重复中的最后一、pandas删除所有重复(不进行数据保留) 目录 pandas删除数据...
  • 关注我,获取更多分享。MySQL中经常会遇到重复的数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?...其中的id为自增主键,name、sex、age三个列是我们判断是否为重复数据的key,如果这...
  • 更新:2016如果您乐意使用有用的more_itertools外部库:from more_itertools import unique_everseenwith open('1.csv','r') as f, open('2.csv','w') as out_file:out_file.writelines(unique_everseen(f))@ ...
  • 不管是在测试中还是面试中,总是会遇到这种场景,某个数据表中的数据存在重复,要求删除重复数据时,保留一。接下来,我给大家演示一下,如何写出符合要求的SQL语句。1、首先,创建一个数据表SC,建表语句如下:...
  • java中删除重复数据

    2021-03-12 22:37:23
    言归正传,怎么过滤掉其中的重复数据呢? StringBuilder是不可继承的,没办法修改功能,所以不能再append的过程中做操作,所以我们只能先把重复的数据过滤掉,然后再用StringBuilder的append方法。CSDN上有这样一个...
  • chr1 12226559 12227059 TNFRSF1B chr1 17051560 17052060 chr1 17053279 17053779 chr1 17338423 17338923 ATP13A2 ATP13A2 ATP13A2 chr1 ...AKR7A2 PQLC2 PQLC2 PQLC2 AKR7A2 PQLC2 我希望删除重复column4值的....
  • python 删除重复值的

    2021-11-29 10:17:17
    删除全部值都重复 mytable = mytable.drop_duplicates() 删除重复关键字的 mytable = mytable.drop_duplicates(subset = ['cst_id'])
  • package com.gaden.delerepeat;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.TreeSet;import ...
  • 在对游戏进行合区的过程中, 存在一个情况,那就是当一个账号在两个区都存在角色的时候, 需要按照条件对重复角色进行删除,比如以等级为条件, 只保留等级高的.解决方案用mysql语句, 两条就可以解决:首先, 第一条语句...
  • I would like to do the following:If two rows have exactly the same value in 3 columns ("ID","symbol", and "date") and have either "X" or "T" in one column ("message"), then remove both of these rows....
  • DataFrame drop_duplicates() 删除重复行 dfLancome = dfLancome.drop_duplicates()
  • 因为一些原因数据库中的一张表(2kw+数据)没有建立主键,并且随着时间的增加产生了大量的重复数据,我通过以下方式进行数据去重: 原理:即使是所有业务字段都一样的两条数据他的rowid也是不一样的。 首先按照业务...
  • Assume that I am having a DataFrame like :val json = sc.parallelize(Seq("""{"a":1, "b":2, "c":22, "d":34}""","""{"a":3, "b":9, "c":22, "d":12}""","""{"a":1, "b":4, "c":23, "d":12}"""))val df = sqlCont...
  • [数据库]DB2删除重复数据0 2016-05-03 12:00:03有时候DB2建表时不设置主键,就可能存在脏数据,例如:两条一样数据重复存在,这时候就需要将重复记录删除,然后留下一条记录。CREATE TABLE TB_01(ID INT ,NAME ...
  • 使用一个集合是没有好处的,除非你真的想用循环值保持一个唯一的,不仅要保持的唯一性,还需要先查找所有文件中的唯一值,Counterdict可以做到:with open("test.csv", encoding="utf-8") as f, open("file_out....
  • 需要对日志文件中的数据进行排序,但是有太多重复。 如何从GNU/Linux下的文本文件中删除所有重复?您需要使用shell管道以及以下两个Linux命令行实用程序来排序和删除重复的文本:1、sort命令 - 在Linux和...
  • oracle删除行数据

    2021-05-07 08:32:00
    1. oracle 删除一个表的重复行语句的理解这个是为了删除的内容ANO和ANAME相同,保留相同内容唯一的一条。先要理解这个,ROWID:ORALCE系统使用一个ID,用于记录数据行,表中的所有数据的ID都是不同的(流水号)。...
  • MYSQL删除重复数据

    2021-01-21 01:56:39
    jobinformation e group by e.name having count(e.name )>1) 之前在oracle数据库中能删除重复数据并且能保留一条唯一数据,但是相同的MySQL中就不行, mysql有个特性,对于表进行修改,删除操作,子查询不能和...
  • 源数据及要求:删除黄忠和庞统的各一行重复数据,两个孙权因为班级不同,保留 数据结果展示: 代码解析: Sub DeleteSameRow1() '删除所有重复,保留唯一值 Dim LastRow As Long Dim i, k, n As Long ...
  • 1、删除重复行 df = spark.read.csv('/sql/customers.csv',header=True) >>> from pyspark.sql import Row >>> df = sc.parallelize([ ... Row(name='regan', age=27, height=170), ... Row...
  • txt转csv import numpy as np ...删除重复行删除所有、保留第一次出现的重复行、保留最后一次出现的重复行) df1=pd.read_csv('1216gg.csv') df1=df1.astype(str) df1.drop_duplicates(subset=
  • 在网上查找删除重复数据保留id最小的数据,方法如下:DELETEFROMpeopleWHEREpeopleName IN (SELECTpeopleNameFROMpeopleGROUP BYpeopleNameHAVINGcount(peopleName) > 1)AND peopleId NOT IN (SELECTmin(peopleId...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,673,737
精华内容 669,494
关键字:

删除相同数据的行