精华内容
下载资源
问答
  • 【mysql】mysql删除重复记录并且只保留一条

    万次阅读 多人点赞 2018-09-03 21:10:13
    2. 删除全部重复试题: 3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的一个) a. 第一种方法: b. 第二种方法: c. 补充第三种方法(根据评论区给的删除总结出来的): 4. 删除表中多余重复试题...

    目录

    一、单个字段的操作

    分组介绍:

    1. 查询全部重复的数据:

    2. 删除全部重复试题:

    3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)

    a. 第一种方法:

    b. 第二种方法:

    c. 补充第三种方法(根据评论区给的删除总结出来的):

    4. 删除表中多余重复试题并且只留1条:

    a. 第一种方法:

    b. ☆第二种方法(与上面查询的第二种方法对应,只是将select改为delete):

    c. 补充第三种方法(评论区推荐的一种方法):

    二、多个字段的操作:

    总结:


    最近在做题库系统,由于在题库中添加了重复的试题,所以需要查询出重复的试题,并且删除掉重复的试题只保留其中1条,以保证考试的时候抽不到重复的题。

    首先写了一个小的例子:

    一、单个字段的操作

    这是数据库中的表:

    分组介绍:

    Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1

    查看是否有重复的数据:

    GROUP BY <列名序列>

    HAVING <组条件表达式>

    查询出:根据dname分组,同时满足having字句中组条件表达式(重复次数大于1)的那些组

    count(*)与count(1) 其实没有什么差别,用哪个都可以

    count(*)与count(列名)的区别:

        count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入)

    1. 查询全部重复的数据:

    Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
    

    2. 删除全部重复试题:

    将上面的查询select改为delete(这样会出错的)

    DELETE
    FROM
    	dept
    WHERE
    	dname IN (
    		SELECT
    			dname
    		FROM
    			dept
    		GROUP BY
    			dname
    		HAVING
    			count(1) > 1
    	)

    会出现如下错误:[Err] 1093 - You can't specify target table 'dept' for update in FROM clause

    原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作

    解决办法:把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。

     

    3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)

    a. 第一种方法:

    SELECT
    	*
    FROM
    	dept
    WHERE
    	dname IN (
    		SELECT
    			dname
    		FROM
    			dept
    		GROUP BY
    			dname
    		HAVING
    			COUNT(1) > 1
    	)
    AND deptno NOT IN (
    	SELECT
    		MIN(deptno)
    	FROM
    		dept
    	GROUP BY
    		dname
    	HAVING
    		COUNT(1) > 1
    )

    上面这种写法正确,但是查询的速度太慢,可以试一下下面这种方法:

    b. 第二种方法:

    根据dname分组,查找出deptno最小的。然后再查找deptno不包含刚才查出来的。这样就查询出了所有的重复数据(除了deptno最小的那行)

    SELECT *
    FROM
    	dept
    WHERE
    	deptno NOT IN (
    		SELECT
    			dt.minno
    		FROM
    			(
    				SELECT
    					MIN(deptno) AS minno
    				FROM
    					dept
    				GROUP BY
    					dname
    			) dt
    	)

    c. 补充第三种方法(根据评论区给的删除总结出来的):

    SELECT
    	* 
    FROM
    	table_name AS ta 
    WHERE
    	ta.唯一键 <> ( SELECT max( tb.唯一键 ) FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 );

     

    4. 删除表中多余重复试题并且只留1条:

    a. 第一种方法:

    DELETE
    FROM
    	dept
    WHERE
    	dname IN (
    		SELECT
    			t.dname
    		FROM
    			(
    				SELECT
    					dname
    				FROM
    					dept
    				GROUP BY
    					dname
    				HAVING
    					count(1) > 1
    			) t
    	)
    AND deptno NOT IN (
    SELECT
    	dt.mindeptno
    FROM
    	(
    		SELECT
    			min(deptno) AS mindeptno
    		FROM
    			dept
    		GROUP BY
    			dname
    		HAVING
    			count(1) > 1
    	) dt
    )

    b. ☆第二种方法(与上面查询的第二种方法对应,只是将select改为delete):

    DELETE
    FROM
    	dept
    WHERE
    	deptno NOT IN (
    		SELECT
    			dt.minno
    		FROM
    			(
    				SELECT
    					MIN(deptno) AS minno
    				FROM
    					dept
    				GROUP BY
    					dname
    			) dt
    	)

    c. 补充第三种方法(评论区推荐的一种方法):

    DELETE 
    FROM
    	table_name AS ta 
    WHERE
    	ta.唯一键 <> (
    SELECT
    	t.maxid 
    FROM
    	( SELECT max( tb.唯一键 ) AS maxid FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 ) t 
    	);

    二、多个字段的操作:

    单个字段的如果会了,多个字段也非常简单。就是将group by 的字段增加为你想要的即可。

    此处只写一个,其他方法请仿照一个字段的写即可。

    DELETE
    FROM
    	dept
    WHERE
    	(dname, db_source) IN (
    		SELECT
    			t.dname,
    			t.db_source
    		FROM
    			(
    				SELECT
    					dname,
    					db_source
    				FROM
    					dept
    				GROUP BY
    					dname,
    					db_source
    				HAVING
    					count(1) > 1
    			) t
    	)
    AND deptno NOT IN (
    	SELECT
    		dt.mindeptno
    	FROM
    		(
    			SELECT
    				min(deptno) AS mindeptno
    			FROM
    				dept
    			GROUP BY
    				dname,
    				db_source
    			HAVING
    				count(1) > 1
    		) dt
    )

    总结:

    其实上面的方法还有很多需要优化的地方,如果数据量太大的话,执行起来很慢,可以考虑加优化一下:

    • 在经常查询的字段上加上索引
    • 将*改为你需要查询出来的字段,不要全部查询出来
    • 小表驱动大表用IN,大表驱动小表用EXISTS。IN适合的情况是外表数据量小的情况,而不是外表数据大的情况,因为IN会遍历外表的全部数据,假设a表100条,b表10000条那么遍历次数就是100*10000次,而exists则是执行100次去判断a表中的数据是否在b表中存在,它只执行了a.length次数。至于哪一个效率高是要看情况的,因为in是在内存中比较的,而exists则是进行数据库查询操作的

     

                                                                                                本人小菜一枚,有什么写的不妥的地方,欢迎大家指教!

                                                                                                我会不定期的看评论,也会根据大家的指点来修改博客不妥的地方!

                                                                                                各位读者有什么好的方法,或者想法欢迎评论区留言。。。

    展开全文
  • python 删除重复项There are many ways to remove duplicates from a Python List. 有很多方法可以从Python列表中删除重复项。 Using a temporary List and Looping 使用临时列表和循环 Using set() built-in ...

    python 删除重复项

    There are many ways to remove duplicates from a Python List.

    有很多方法可以从Python列表中删除重复项。

    从列表中删除重复项 (Removing Duplicates from a List)

    Python list can contain duplicate elements. Let’s look into examples of removing the duplicate elements in different ways.

    Python列表可以包含重复的元素。 让我们看一下以不同方式删除重复元素的示例。

    1.使用临时列表 (1. Using Temporary List)

    This is the brute-force way to remove duplicate elements from a list. We will create a temporary list and append elements to it only if it’s not present.

    这是从列表中删除重复元素的蛮力方法。 我们将创建一个临时列表,并仅在不存在临时列表时才添加元素。

    ints_list = [1, 2, 3, 4, 3, 2]
    
    temp = []
    
    for x in ints_list:
        if x not in temp:
            temp.append(x)
    
    ints_list = temp
    
    print(f'Updated List after removing duplicates = {temp}')

    Output: Updated List after removing duplicates = [1, 2, 3, 4]

    输出Updated List after removing duplicates = [1, 2, 3, 4]

    Recommended Reading: Python f-strings

    推荐读物Python f字符串

    2. set()函数 (2. set() function)

    Python set doesn’t have duplicate elements. We can use the built-in set() function to convert the list to a set, then use the list() function to convert it back to the list.

    Python集没有重复的元素。 我们可以使用内置的set()函数将列表转换为集合,然后使用list()函数将其转换回列表。

    ints_list = [1, 2, 3, 4, 3, 2]
    
    ints_list1 = list(set(ints_list))
    print(ints_list1)  # [1, 2, 3, 4]

    3.列出元素作为字典键 (3. List elements as Dictionary Keys)

    We know that dictionary keys are unique. The dict class has fromkeys() function that accepts an iterable to create the dictionary with keys from the iterable.

    我们知道字典键是唯一的。 dict类具有fromkeys()函数,该函数接受可迭代的对象,以使用可迭代对象的键来创建字典。

    ints_list = [1, 2, 3, 4, 3, 2]
    
    ints_list2 = list(dict.fromkeys(ints_list))
    print(ints_list2)  # [1, 2, 3, 4]

    4.列表count()函数 (4. List count() function)

    The list count() method returns the number of occurrences of the value. We can use it with the remove() method to eliminate the duplicate elements from the list.

    列表count()方法返回该值的出现次数。 我们可以将其与remove()方法一起使用,以从列表中消除重复的元素。

    ints_list = [1, 2, 3, 4, 3, 2]
    
    for x in ints_list:
        if ints_list.count(x) > 1:
            ints_list.remove(x)
    print(ints_list)  # [1, 2, 3, 4]

    5.清单理解 (5. List Comprehension)

    We can create a list from an iterable using the list comprehension. This technique is the same as using the temporary list and the for loop to remove the duplicate elements. But, it reduces the number of lines of the code.

    我们可以使用列表推导从可迭代对象创建列表。 此技术与使用临时列表和for循环删除重复的元素相同。 但是,它减少了代码的行数。

    int_list = [1, 2, 3, 4, 3, 2]
    temp = []
    [temp.append(x) for x in ints_list if x not in temp]
    print(temp)  # [1, 2, 3, 4]

    从列表中删除重复项的最佳方法 (Best Way to Remove Duplicates from a List)

    If you don’t want duplicate elements, you should use Set. But, if you have to remove the duplicate values from a list, then I would prefer count() function because it doesn’t create another temporary set or list object. So, it’s more memory efficient.

    如果不想重复元素,则应使用Set。 但是,如果必须从列表中删除重复的值,则我更喜欢count()函数,因为它不会创建另一个临时集或列表对象。 因此,它具有更高的内存效率。

    翻译自: https://www.journaldev.com/32742/python-remove-duplicates-from-list

    python 删除重复项

    展开全文
  • Excel一键删除重复数据,按指定列删除重复的行 地址:www.excelfb.com, 点击删除重复的行,保留一行 选择Excel文件,一键删除 此工具为js编写

    Excel一键删除重复数据,按指定列删除重复的行

    地址:www.excelfb.com , 点击: 批量删除---》删除重复的行,保留一行

    选择Excel文件,一键删除

     

    展开全文
  • MySQL删除重复

    千次阅读 2019-11-20 11:39:18
    “日暮酒醒人已远,满天风雨下西楼” 序 在数据库的操作中,经常会遇到有重复的...1. 使用not in 删除重复行,SQL语句如下: DELETE FROM fruit_test WHERE id NOT IN (SELECT MAX(id) as id FROM fruit_test GROU...

    “日暮酒醒人已远,满天风雨下西楼”

    在数据库的操作中,经常会遇到有重复的数据,并且这些重复的行是没用的数据,需要删除。我做了一个测试表,如下:
    在这里插入图片描述
    苹果和香蕉有重复的。

    删除重复行

    1. 使用not in 删除重复行,SQL语句如下:

    DELETE FROM fruit_test
    WHERE id NOT IN (SELECT MAX(id) as id
    FROM fruit_test
    GROUP BY name, price);
    

    这里是根据名称和价格分组,拿到不重复数据的最大ID值,然后删除不在这最大ID值的行,即可删除重复行。如果该句MySQL中执行会出现You can't specify target table 'fruit_test' for update in FROM clause错误,如下:
    在这里插入图片描述
    该问题也好解决,把not in 里面的SQL再嵌套一层即可:

    DELETE FROM fruit_test
    WHERE id NOT IN ( 
    select id from (SELECT MAX(id) as id  -- 嵌套一层已解决上面的报错
    FROM fruit_test
    GROUP BY name, price) a);
    

    该方法的好处是,主流的数据库都支持这种语法。

    2. 使用EXCEPT删除重复行
    如果你使用的是SqlServer数据库,那么可以使用EXCEPT减去要留下的数据,SQL如下:

    DELETE FROM fruit_test
    WHERE id IN ( SELECT id -- 全部 rowid
    FROM fruit_test
    EXCEPT -- 减去
    SELECT MAX(id) -- 要留下的 rowid
    FROM fruit_test
    GROUP BY name, price) ;
    

    3. 使用minus删除重复行
    minus和EXCEPT效果一样,只是EXCEPT用在sqlserver,minus用在oracle。SQL语句如下:

    DELETE FROM fruit_test
    WHERE id IN ( SELECT id 
    FROM fruit_test
    minus
    SELECT MAX(id) 
    FROM fruit_test
    GROUP BY name, price) ;
    
    展开全文
  • Java for循环删除ArrayList重复元素陷阱,Iterator迭代器遍历删除重复元素这是一个一不留神就犯下错误的Java列表ArrayList重复删除元素陷阱,并且问题比较隐蔽。问题描述,假设一个ArrayList存储若干个字符串String...
  • Matlab 删除重复元素

    万次阅读 2018-10-18 16:01:52
    Matlab 删除重复元素或删除重复行 函数:unique b = unique(A) b = unique(A,'rows') [b,m,n] = unique(...) 描述 1、b = unique(A) 返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。A可以...
  • MySQL 如何查找并删除重复记录

    千次阅读 多人点赞 2020-08-11 18:00:04
    介绍了如何在 MySQL 中查找并删除重复记录,包括使用 GROUP BY 分组、子查询或者连接查询等方法查找单个字段或者多个字段中的重复数据,以及使用 DELETE FROM 语句、子查询、中间表和窗口函数等方法实现重复数据的...
  • 编辑 - 删除 - 删除重复行。最后只剩下不重复的部分,之前重复的行,也只剩下一份。
  • 我现在有爬好数据的csv文件,需要导入neo4j形成节点。 但是这csv中有些数据是一样的(即形成的节点一模一样) 现在需要不导入重复的,或者导入后在neo4j中删除重复节点,如何做?
  • dataframe删除重复

    千次阅读 2019-05-24 14:13:14
    drop_duplicates()是删除重复行 (二) 代码即图片说明 df1 = pd.DataFrame({'name':['张三','李四','王五','张三'],'age':[18,19,20,18]}) df2 = pd.DataFrame({'name':['张三','李四','王五','张三'],'id...
  • python删除重复文件

    千次阅读 2020-01-29 20:14:24
    网上爬取的图片重复量太大,需要删除重复图片。 环境 python 3 hashilib 分析一下这个问题: 首先,文件个数非常多,手工查找是不现实的,再说,单凭我们肉眼,在几千张图片或文件里面找到完全相同的难度也是...
  • Access 删除重复记录(删除多余记录)
  • sql删除重复数据

    万次阅读 2018-06-21 12:00:50
    比如我要删除我cities_airportrunway这张表中runway_number,runway_ref_airport_id这两个字段内容重复的数据,删除重复的只留一条。sql我可以这样写:delete from cities_airportrunway where id not in (select min...
  • Oracle 如何查找并删除重复记录

    千次阅读 2020-08-24 13:50:23
    本文介绍如何在 Oracle 数据库中查找并删除重复记录,包括使用聚合函数加上子查询或者连接查询、使用分析函数等方法查找单个字段或者多个字段中的重复数据,以及使用子查询中分析函数等方法实现重复数据的删除。
  • 假设我们有表A 里面有字段 field 里面有很多重复数据。 现在需要查询当前字段重复的个数 mysql>select filed ,count(*) as total from A group by field having count(1)>1 ...那么如何删除重复的数
  • ArrayList中删除重复的字符串元素——ArrayList中删除重复的自定义对象元素1、ArrayList中删除重复的字符串元素: 需求:ArrayList中去除集合中字符串的重复值(字符串的内容相同) 要求:不能创建新的集合,就在...
  • mysql 删除重复数据

    千次阅读 2017-11-22 16:12:28
    mysql删除重复数据 今天工作时遇到了一个问题,将mysql中一个表里面的重复数据删除掉,用了多种方法一直提示错误,在网上查了半天终于解决了。 例如:需要删除A表中uid字段重复的数据,具体操作如下: 首先查询出不...
  • Oracle 删除根据id 删除重复数据

    千次阅读 2017-04-05 15:31:43
    查询重复的数据 select * from t_creditobjection a where (a.id) in (select id from t_creditobjection group by id having count...删除重复的数据 delete from t_xzcf_delete where id in (select id fro...
  • 链表删除重复元素

    千次阅读 2018-08-11 19:24:49
    问题一:  删除链表中的重复元素,但是保留重复元素的第一个元素   class Node():  def __init__(self,x): ... 方法一:删除重复元素的后一个,保留第一个 def delete_dupicate(A):  p = A  ...
  • mongoDb删除重复数据

    千次阅读 2018-10-30 10:47:13
    注:mongodb当前版本是...查询并循环删除重复数据: 删除语句解析: db.userInfo.aggregate([  {  $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}  ...
  • 题目:删除单链表中的重复节点(删除重复项;即只要链表中某个元素的出现次数大于1,那么就将链表中所有的该元素都删除)(即重复的结点不保留) 例如,链表1->3->2->5->6->1->5->7->3->8->2 ,处理后为 6->7->8。 ...
  • dataframe删除重复的行

    2020-06-19 14:05:21
    dataframe删除重复的行 #去掉column1和column2列中重复的行,并保留重复出现的行中第一次出现的行 norepeat_df = df.drop_duplicates(subset=['column1', 'column2'], keep='first') 当keep=False时,就是去掉所有...
  • 详解mysql删除重复数据

    千次阅读 2020-05-06 12:46:08
    mysql删除重复数据语句语句分析模拟测试解析 语句 delete from t_sys_role_menu where id in( SELECT id from( SELECT id from t_sys_role_menu WHERE (companyid,menuid,roleid) IN ...
  • 题目题目标题:删除重复字符 给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序,并且区分大小写。 详细描述:接口说明 原型: int Get...
  • MySQL删除重复记录

    千次阅读 2017-02-07 15:57:34
    写一下今天遇到的MySQL删除重复问题,便于以后查看。 --by yinpeng 在插入数据的时候,不添加主键插入就有可能会出现重复插入记录的情况,这个时候就需要删除重复的记录。 针对表 t_addr (id,addr,city,...)...
  • Oracle数据库删除重复数据

    千次阅读 2018-09-04 00:01:49
    Oracle数据库中如何删除重复数据。 第一种情况:部分字段重复数据的删除 先查询出那些数据是重复的: select 字段1 ,字段2 ,count(*) from 表名 group by 字段1 ,字段2 having count(*) &amp;gt...
  • 删除重复字符

    千次阅读 2012-11-17 21:23:40
    删除重复字符 背景: 输入一个长度不超过 100 的字符串,删除串中的重复字符。 输入: 输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。 输出: 删除重复字符后的...
  • postgres删除重复数据

    2018-08-13 17:36:10
    参考:PostgreSQL删除重复数据 sql语句: delete from table where ctid not in (select min(ctid) from table group by tableColumn) 其中: table是数据表表名, tableColumn是判断数据是否重复的关键列,...
  • SQL SERVER删除重复

    2019-01-07 16:05:47
    SQL SERVER删除重复行 我的数据表中重复的字段 是 stu_id stu_name 唯一字段是id --删除重复列 delete from stu where id not in (select max(id) as id from stu group by stu_id)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,842
精华内容 21,136
关键字:

删除重复