精华内容
下载资源
问答
  • mysql 删除重复数据

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

    mysql删除重复数据

    今天工作时遇到了一个问题,将mysql中一个表里面的重复数据删除掉,用了多种方法一直提示错误,在网上查了半天终于解决了。

    例如:需要删除A表中uid字段重复的数据,具体操作如下:

    首先查询出不重复的数据: 

    select * from a group by uid;
            接下来新建一个表B,设计格式跟表A的完全一样,将查询出来的结果插入到表B中

    insert into B (select * from A  GROUP BY uid);
    然后根据A表和B表另一个字段删除A表中包含B表的数据

    delete a.* from A as a,B as b where a.id = b.id;
    这样A表中就不存在uid重复的数据了。


    在PostgreSQL中删除重复的数据很容易:

        

    DELETE
    FROM
    	A
    WHERE
    	ctid NOT IN (
    	SELECT
    		MIN (ctid)
    		FROM
    			A
    		GROUP BY
    		uid
    	);		

    参考: https://www.cnblogs.com/luyingfeng/p/5772262.html

    展开全文
  • MySql删除重复数据

    千次阅读 2017-11-23 10:44:27
    Mysql中需要将表中某一个或多个字段值重复数据删掉,从网上查了大部分sql形式如下,执行会报错 错误提示:不能在同一个sql语句中,先select一个表,然后再update这个表,有点类似于Java中不能在普通for each...

    Mysql中需要将表中某一个或多个字段值重复的数据删掉,从网上查了大部分sql形式如下,执行会报错

    错误提示:不能在同一个sql语句中,先select一个表,然后再update这个表,有点类似于Java中不能在普通for each遍历集合的时候删除或修改集合元素一样。对上述sql进行了修改,将查询语句外面再套一个查询形成一张临时表,进而去重成功。

    update test_table set is_deleted = 1 where id not in (select a.id from (select max(id) id from test_table group by vin,step,DATE_FORMAT(op_date,'%Y-%m-%d')) a);

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

    万次阅读 2018-03-27 14:25:55
    如图所示:就解决了mysql一条sql删除重复信息了。 为了大家方便: DELETE FROM `ex` WHERE id NOT IN ( SELECT id FROM (SELECT max(b.id) AS id FROM `ex` b GROUP BY b.phone) b); 我为人人,人人为我...

    也许你在百度中找到一条sql,欣喜若狂:  (脚本之家,目前为止依然是错误的例子)

    delete FROM `ex` WHERE phone in (SELECT c.phone
    FROM `ex` as c
    GROUP BY c.phone

    HAVING COUNT( * ) >1) and id not in (select max(b.id) from `ex` as b group by b.phone);

    注:ex(example 表名)、根据phone字段,判断是否重复。重复保留最新插入的一条(即自增id最大的)

    但是,执行之后,结果不如你所愿:

    /* SQL错误(1093):You can't specify target table 'ex' for update in FROM clause */

    翻译:不能先select出同一表中的某些值,再update(delete)这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。

    问题只针对:mysql,不包含oracle、sql server等。因为mysql对子语句的支持性不是太好。

    问题解决:


     先select出的结果再通过中间表select一遍,select 的结果 起别名 就成为一个缓存的表了, 一张虚拟的表。

    如图所示:就解决了mysql一条sql删除重复信息了。

    为了大家方便:

    DELETE  FROM   `ex`   WHERE  id NOT IN (  SELECT  id  FROM  (SELECT max(b.id) AS id  FROM `ex`  b  GROUP BY b.phone) b);




    我为人人,人人为我;美美与共,天下大同;



    展开全文
  • 主要介绍了Mysql删除重复数据保留最小的id 的解决方法,需要的朋友可以参考下
  • 详解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 ...

    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 (
    							SELECT
    									companyid,menuid,roleid
    							FROM
    									t_sys_role_menu
    							GROUP BY
    								 companyid,menuid,roleid
    							HAVING
    									count(*) > 1
    					)
    			AND id NOT IN (
    					SELECT
    							min(id)
    					FROM
    							t_sys_role_menu 
    					GROUP BY
    							companyid,menuid,roleid
    					HAVING
    							count(*) > 1
    		)
    	) AS tmpresult
    )
    
    

    语句分析

    在这里插入图片描述

    模拟测试

    CREATE TABLE `t_sys_role_menu` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `companyid` int(11) DEFAULT NULL,
      `menuid` int(11) DEFAULT NULL,
      `roleid` int(11) DEFAULT NULL,
      `remark` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    
    

    添加数据
    在这里插入图片描述
    其中id为1、4、6、7和2、5都出现了companyid、menuid、roleid字段重复

    解析

    首先执行3,查询t_sys_role_menu中以companyid、menuid、roleid分组并且结果中这三个值相同数据条数大于1的数据(也就是找到这三个地段中出现多次的数据不包含1次的),然后在通过后面的查询这些重复值中最小的ID(也就是在这些重复值中去除一个最小的ID)

    SELECT
    	companyid,
    	menuid,
    	roleid
    FROM
    	t_sys_role_menu
    GROUP BY
    	companyid,
    	menuid,
    	roleid
    HAVING
    	count(*) > 1
    

    输出
    在这里插入图片描述

    SELECT
    		min(id)
    FROM
    		t_sys_role_menu 
    GROUP BY
    		companyid,menuid,roleid
    HAVING
    		count(*) > 1
    

    输出
    在这里插入图片描述
    执行行2,还是查询表t_sys_role_menu通过companyid、menuid、roleid三个字段匹配3模块查询后的结果,并且让ID不等于这个最小的值。

    SELECT
    			id
    			from
    					t_sys_role_menu
    			WHERE
    					(companyid,menuid,roleid) IN (
    							SELECT
    									companyid,menuid,roleid
    							FROM
    									t_sys_role_menu
    							GROUP BY
    								 companyid,menuid,roleid
    							HAVING
    									count(*) > 1
    					)
    			AND id NOT IN (
    					SELECT
    							min(id)
    					FROM
    							t_sys_role_menu 
    					GROUP BY
    							companyid,menuid,roleid
    					HAVING
    							count(*) > 1
    		)
    

    输出
    在这里插入图片描述

    执行1,通过执2模块中的语句可以过滤出重复数据并且剔除重复数据中最小的ID,也就是执行完2语句后返回的是表中companyid、menuid、roleid三个字段出现重复的并且id都大于最小的ID
    最后执行语句其实为

    delete from t_sys_role_menu 
    where id in(4,5,6,7)
    

    1模块中的查询看似多余,其实是mysql必须要求的语法,因为如果不加词句如下:

    delete from t_sys_role_menu where id in(
    SELECT
    	id
    	from
    			t_sys_role_menu
    	WHERE
    			(companyid,menuid,roleid) IN (
    					SELECT
    							companyid,menuid,roleid
    					FROM
    							t_sys_role_menu
    					GROUP BY
    						 companyid,menuid,roleid
    					HAVING
    							count(*) > 1
    			)
    	AND id NOT IN (
    			SELECT
    					min(id)
    			FROM
    					t_sys_role_menu 
    			GROUP BY
    					companyid,menuid,roleid
    			HAVING
    					count(*) > 1
    		)
    )
    

    这样执行会报错,原因是因为mysql不允许对正在打开作为条件的表进行修改。
    所以需要在条件查询完后将结果存入一个临时数据表中(在外层条件select语句)

    delete from t_sys_role_menu where id in(
    SELECT id from(
    	SELECT
    				id
    				from
    						t_sys_role_menu
    				WHERE
    						(companyid,menuid,roleid) IN (
    								SELECT
    										companyid,menuid,roleid
    								FROM
    										t_sys_role_menu
    								GROUP BY
    									 companyid,menuid,roleid
    								HAVING
    										count(*) > 1
    						)
    				AND id NOT IN (
    						SELECT
    								min(id)
    						FROM
    								t_sys_role_menu 
    						GROUP BY
    								companyid,menuid,roleid
    						HAVING
    								count(*) > 1
    			)
    	) temptb
    )
    

    输出

    受影响的行: 4
    时间: 0.006s
    

    查看表数据
    在这里插入图片描述

    展开全文
  • mysql|mysql删除重复数据,一条sql就搞定
  • MySQL删除重复数据只保留最新的一条

    千次阅读 2019-04-17 19:00:37
    MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题。 案例描述: 按天删除表中重复数据只保留最新的一条(这里...
  • 业务中遇到要从表里删除重复数据的需求,使用了下面的方法,执行成功,大家可以参考使用
  • Mysql删除重复数据只保留一条,我的sql这样的 DELETE from t_patient WHERE pa_iid IN (select pa_iid from t_patient group by pa_vname having count(pa_vname)>1) 但是报错了: [Err] 1093 - You can't specify ...
  • mysql删除重复数据只保留id最大一条记录
  • 我有一个保存手机短信的收据表 结构是这样的 表名sms,字符串userid,字符串smsid,长字符串content,主键id 但是因为有些短信数据会重复上传...我现在要删除所有userid和smsid相同的重复数据保留一条,有主键,要怎么做
  • MySQL删除重复数据中id最大的数据

    千次阅读 2019-04-17 18:37:51
    SQL如下 DELETE --删除 ... personnum IN (--重复数据中 SELECT n.PERSONNUM FROM ( SELECT a.PERSONNUM FROM person a WHERE a.PERSONNUM IN ( SELECT ...
  • 今天同事写了个删除重复数据保留一条记录的数据库语句,问我错在哪儿,正好给大家讲讲【注:以下语句只单对MYSQL数据库】 语句 -- 问题: delete from `show` where id not in ( select MAX(id) from `show` ...
  • 今天需要删除数据库中某个字段(source_id)的重复数据,但是又要保留其中最新的一条,思路是: 根据该字段分组,获取分组中最大的那一条,用not in 包裹,然后执行delete语句。中间遇到了两个问题,第一个就是报错...
  • 现在表中有少量重复数据和大量非重复数据重复数据中,preference列和timestamp列不为空的这些,需要保留;preference列和timestamp列为空的这些需要删除,应该怎么办? 初学者,希望答案详细:) 感激不尽 +----...
  • Mysql删除重复数据、比较两个表数据

    千次阅读 2018-10-25 15:20:59
    删除t_discredit_company_info表重复数据(t_discredit_company_info表数据重复) DELETE FROM t_discredit_company_info WHERE id IN ( SELECT * FROM ( SELECT id FROM t_discredit_company_info WHERE (company...
  • MySQL删除重复数据 并保留ID最大值

    千次阅读 2017-02-10 14:55:54
    DELETE a FROM user1 a JOIN ( SELECT user_name, count(*), MAX(id) AS id FROM user1 GROUP BY user_name,over HAVING COUNT(*) > 1 ) b ON
  • mysql删除重复数据只保留一条

    万次阅读 2019-09-20 15:59:29
    _id` char(32) DEFAULT NULL, ... 测试数据: INSERT INTO `book` VALUES ('1', 'n1', '1'); INSERT INTO `book` VALUES ('2', 'n2', '1'); INSERT INTO `book` VALUES ('3', 'n3', '1'); INSERT INTO
  • mysql删除重复数据,并保留一条

    千次阅读 2018-01-18 15:29:27
    因为系统bug在对所在店铺的会员进行屏蔽的时候没有进行查重操作,导致在屏蔽表中出现了重复数据,所以需要删除此表中姓名重复数据,并保留其中的一条。模拟数据如下图: 第一条sql : delete from t_black_...
  • 如题: 有Person表 +----+---------+ | Id | Email | +----+---------+ ...问题:删除重复的邮件地址 这类问题在数据库的笔试题中经常会遇见,解题思路有两个,一连接,二子查询 连接 DELETE p...
  • mysql 删除重复数据只保留一条记录

    万次阅读 2017-07-15 10:22:33
    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id from order_info group by order_number) as b); delete from table where id not in ...
  • 1、查询重复记录 SELECT * FROM 表名 WHERE 重复字段 IN (SELECT 重复字段 FROM 表名 ... 2、删除重复记录,但保留一条 DELETE FROM 表名 WHERE 重复字段 IN (SELECT 重复字段 FROM 表名 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,362
精华内容 69,744
关键字:

mysql删除重复数据

mysql 订阅