精华内容
下载资源
问答
  • 刚开始,根据我的想法,这个很简单嘛,上sql语句 delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1); 执行,报错!!~!~ 异常意为:你不能指定目标表的更新...
  • 查重是我们在工作中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...
  • mysql|mysql删除重复数据,一条sql就搞定

    SQL 逻辑:

    1. 首先找出所有重复的sku_id
    2. 在找出这些sku_id中关联的主键id最大的一条记录(用来保留,不删除)
    3. 两个sql合并 就可以筛选出来最终需要删除的id

    select id from sku_and_goods_sign where sku_id in (select sku_id from sku_and_goods_sign group by sku_id having count(1) > 1) and id not in (select max(id) from sku_and_goods_sign group by sku_id having count(1) > 1)

    展开全文
  • mysql数据库删除重复数据保留一条

    万次阅读 多人点赞 2019-07-09 22:15:13
    现在身份证号identity_id和姓名name有很多重复数据,需要删除只保留一条有效数据。 2.模拟环境 1.等入mysql数据库,创建一个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2....

    1.问题引入

    假设一个场景,一张用户表,包含3个字段。id,identity_id,name。现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据。

    2.模拟环境

    • 1.登入mysql数据库,创建一个单独的测试数据库mysql_exercise
    create database mysql_exercise charset utf8;
    
    • 2.创建用户表users
    create table users(
    					id int auto_increment primary key,
    					identity_id varchar(20),
    					name varchar(20) not null
                       );
    

    在这里插入图片描述

    • 3.插入测试数据
    insert into users values(0,'620616199409206512','张三'),
    						(0,'620616199409206512','张三'),
    						(0,'62062619930920651X','李四'),
    						(0,'62062619930920651X','李四'),
    						(0,'620622199101206211','王五'),
    						(0,'620622199101206211','王五'),
    						(0,'322235199909116233','赵六');
    

    可以多执行几次,生成较多重复数据。
    在这里插入图片描述

    • 4.解决思路
      (1)根据身份证号和name进行分组;
      (2)取出分组后的最大id(或最小id);
      (3)删除除最大(或最小)id以外的其他字段;

    • 5.第一次尝试(失败!!!)

    delete from users where id not in (select max(id) from users group by identity_id,name);
    

    报错:

    1093 (HY000): You can't specify target table 'users' for update in FROM clause
    

    在这里插入图片描述
    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录。
    解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误,
    这个问题只出现于mysql,mssql和oracle不会出现此问题。

    所以我们可以先将括号里面的sql语句先拿出来,先查到最大(或最小)id。

    select max_id from (select max(id) as max_id from users group by identity_id,name);
    

    接着,又报错了!!!

    ERROR 1248 (42000): Every derived table must have its own alias
    

    意思是说:提示说每一个衍生出来的表,必须要有自己的别名!

    执行子查询的时候,外层查询会将内层的查询当做一张表来处理,所以我们需要给内层的查询加上别名
    在这里插入图片描述
    继续更正:
    给查询到的最大(或最小id)结果当做一张新的表,起别名t,并查询t.mix_id

    select t.max_id from (select max(id) as max_id from users group by identity_id,name) as t;
    

    可以成功查到最大(或最小)id了,如下图:
    在这里插入图片描述

    • 6.第二次尝试(成功!!!)
    delete from users where id not in (
    		select t.max_id from 
    		(select max(id) as max_id from users group by identity_id,name) as t
    		);
    

    执行结果:
    在这里插入图片描述
    成功将重复的数据删除,只保留了最后一次增加的记录。同理也可以保留第一次添加的记录(即删除每个分组里面除最小id以外的其他条记录)

    3.知识拓展一:更新数据

    其他场景应用:要将用户表user_info里名字(name)为空字符串("")的用户的状态(status)改成"0"

    update user_info set status='0' where user_id in (select user_id from user_info where name='')
    

    同样报了如下错误:

    You can’t specify target table ‘user_info’ for update in FROM clause

    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录,解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误。
    以下两种均可!!!

    update user_info set status='0' where user_id in 
    	 (select user_id from (select user_id from user_info where name = '') t1);
    

    下面这种也可,细微差别,别名可带as可不带,t1.user_id 直接和内层的user_id对应也可以。

    update user_info set status='0' where user_id in 
    	(select t1.user_id from (select user_id from user_info where name='') as t1);
    

    3.1 分步骤解析

    (1)将以下查询结果作为中间表:

    select user_id from user_info where name='';
    

    (2)再查询一遍中间表作为结果集:

    select user_id from (select user_id from user_info where name='') as t;
    

    (3)更新数据

    update user_info set status='0' where user_id in 
    	(select user_id from (select user_id from user_info where name='') as t1);
    

    4.拓展练习:删除重复数据

    编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    | 3  | john@example.com |
    +----+------------------+
    

    Id 是这个表的主键。
    例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    +----+------------------+
    
    
    • 解答一:
    delete from Person where Id not in (
    	select t.min_id from (
    		select min(Id) as min_id from Person group by Email
    		) as t
    	);
    
    • 解答二:
    delete p1 from 
    	Person as p1,Person as p2 
    		where p1.Email=p2.Email and p1.Id > p2.Id;
    
    展开全文
  • **#例1:根据手机号customer_id查询所有重复数据** SELECT * FROM aad_apply_main WHERE customer_id IN ( SELECT customer_id FROM aad_apply_main GROUP BY ...
    **#例1:根据手机号customer_id查询所有重复的数据**
    SELECT
        *
    FROM
        aad_apply_main
    WHERE
        customer_id IN (
            SELECT
                customer_id
            FROM
                aad_apply_main 
            GROUP BY
                customer_id
            HAVING
                count(customer_id) > 1
        ) ORDER BY customer_id DESC ;
    
    
    
    #例2:根据手机号customer_id删除重复数据且只保留一条
    DELETE
      FROM
        aad_apply_main
      WHERE
      	stdmerno='***' AND
        customer_id IN (SELECT
            *
        FROM
            (SELECT
                customer_id
            FROM
                aad_apply_main WHERE stdmerno='***' 
            GROUP BY customer_id
            HAVING COUNT(customer_id) > 1) t1)
        AND apply_no NOT IN (SELECT
            *
        FROM
            (SELECT
                MIN(apply_no)
            FROM
                aad_apply_main WHERE stdmerno='***' 
            GROUP BY customer_id
            HAVING COUNT(customer_id) > 1) t2)
    
    **字段解释:**
    	customer_id : 根据此字段的重复来删除数据;
    	stdmerno    : 根据此字段来约束需要去重复的对象
    	apply_no    : 此字段为表的主键id字段
    

    更多java好资源请关注公众号哦
    在这里插入图片描述

    展开全文
  • MySQL数据库中删除重复记录的方法总结[推荐]
  • 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 ...

    参考博客https://www.cnblogs.com/jiangxiaobo/p/6589541.html

    SQL如下

    DELETE
    FROM
    	person
    WHERE
    	personname IN (
    		SELECT
    			n.personname
    		FROM
    			(
    				SELECT
    					c.personname
    				FROM
    					person c
    				WHERE
    					c.type= '1'
    				GROUP BY
    					c.personname
    				HAVING
    					count(c.personname) > 1
    			) n
    	)
    AND id IN (
    	SELECT
    		m.id
    	FROM
    		(
    			SELECT
    				max(g.id) AS id
    			FROM
    				person g
    			GROUP BY
    				g.personname
    			HAVING
    				count(g.personname) > 1
    		) m
    );
    
    注意

    主语句删除操作

    DELETE FORM PERSON 
    WHERE 
    PERSONNAME IN([重复的PERSONNAME数据])
    AND ID IN([重复数据中id最大值])
    

    重复的PERSONNAME数据和重复的id数据作为结果集需要用临时表再查询一次,如下:

    SELECT * FROM ([结果集]) A
    
    展开全文
  • MySQL删除重复数据只保留最新的一条

    千次阅读 2019-04-17 19:00:37
    MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题。 案例描述: 按天删除表中重复数据只保留最新的一条(这里...
  • 由于每次执行只删除重复数据的一条,需要重复执行,如果本轮没有数据被删就OK #!/bin/sh # delete all company's duplicate uid MYSQL_BIN_PATH=/data/mysql/server/mysql_3306/bin MYSQL_SOCK_PATH=/data/mysql/...
  • 主要介绍了Mysql一些复杂的sql语句(查询与删除重复的行),需要的朋友可以参考下
  • 数据库中有重复数据时,用到哪些sql语句? 这里有若干数据,并掺杂了重复数据 1. 查看过滤重复后的数据 思路, group by 分组可以对多个列进行分组, 分组后可以过滤掉重复的数据 sql语句: SELECT id,`name`,...
  • #coding:utf-8 import mysql.connector mydb = mysql.connector.connect( host='localhost', user='root', passwd='123456', database='mydatabase', buffered = True ) print(mydb) #1、创建数据库...
  • 正好想写一条删除重复语句并保留一条数据SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:表字段和数据: SQL语句: [sql] view plain copy DELETE FROM `user` WHERE...
  • MySQL 处理重复数据

    2020-12-16 16:38:00
    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。 本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。 防止表中...
  • 今天需要删除数据库中某个字段(source_id)的重复数据,但是又要保留其中最新的一条,思路是: 根据该字段分组,获取分组中最大的那一条,用not in 包裹,然后执行delete语句。中间遇到了两个问题,第一个就是报错...
  • MySql删除部分字段重复数据

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

    万次阅读 2018-08-23 15:30:43
    test表中name字段信息有重复,想进行过滤删除重复数据 删除重复数据之后的预期结果(不考虑id):   方法一: 用 create ......select......group by ...... 先创建临时表tab,新表tab中的数据时从test表中分组...
  • sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows from a SQL table. 本文介绍了对SQL表中的重复行执行SQL删除活动的过程。 介绍 (Introduction...
  • 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 ...
  • 一段时间后发现添加了很多重复的关联记录,需要在数据库中删除;(为了避免再出现冗余的重复记录,添加时要增加验证是否是重复记录) 这里有几个点: 通过group by以及having count(*)>1 来查询到重复记录...
  • mysql删除完全重复数据(主键重复

    千次阅读 热门讨论 2018-04-14 19:44:30
    业务需求删除表中重复数据只保留一行,网上方法很多,分享一个MySQL删除重复数据只保留一条,但是根据主键保留数据对我们并不适用。因为我们主键也重复的mmp。(数据表并没有做主键限制,主键值由hibernate uuid...
  • 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...
  • 我有一个保存手机短信的收据表 结构是这样的 表名sms,字符串userid,字符串smsid,长字符串content,主键id 但是因为有些短信数据会重复上传...我现在要删除所有userid和smsid相同的重复数据保留一条,有主键,要怎么做
  • MySQL删除重复数据只保留一条

    万次阅读 2018-09-20 18:14:45
    SQL语句,删除重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢  1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT * FROM people WHERE ...
  • 本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...
  • 前提说明:数据库采用的是mysql。 数据库表格: 题目: 删除name相同的行,并且保留的行是最小行。 思路: 1.找出除了编号不同,其他信息不全相同的编号。 关键词:group by……having :分组查询,我对这个...
  • 低效率(该SQL一次只会删除重复的一条数据,需要执行n次,不推荐) DELETE FROM `TEST` WHERE `ID` IN ( SELECT * FROM ( SELECT `ID` FROM `TEST` GROUP BY `CODE` ,`NAME` HAVING COUNT(*) > 1 )L );   ...
  • 如何删除mysql数据库的重复数据

    千次阅读 2018-01-04 12:30:31
    1 首先利用sql查到你所需要的不重复数据 select *, count(distinct title) from cms_article group by title 2 然后在navicat中将其复制成插入语句 这时候问题出来了,因为所插入的sql中中有一个多余字段 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,420
精华内容 50,568
关键字:

mysql删除重复数据sql

mysql 订阅