精华内容
下载资源
问答
  • 先复制出原CREATE TABLE 新 SELECT * FROM 旧;...复制去重后的数据回新INSERT INTO 旧 SELECT [所有字段] FROM 新 GROUP BY [所有字段]; 转载于:https://blog.51cto.com/13466287/2317383...

    先复制出原表
    CREATE TABLE 新表 SELECT * FROM 旧表;

    清空原表
    DELETE FROM 旧表;

    复制去重后的数据回新表
    INSERT INTO 旧表 SELECT [所有字段] FROM 新表 GROUP BY [所有字段];

    转载于:https://blog.51cto.com/13466287/2317383

    展开全文
  • 用户users,表字段id,user_code,user_name,由于在开始建表的时候没有确定主键,导致该表中存在重复记录,如下所示 id user_code user_name 1 001 Jame 2 001 Jame 3 001 Jame ...

    用户表users,表字段id,user_code,user_name,由于在开始建表的时候没有确定主键,导致该表中存在重复记录,如下表所示

    iduser_codeuser_name
    1001Jame
    2001Jame
    3001Jame
    4001Jame
    5001Jame
    6
    请编写一个SQL语句,清除表中垃圾数据

    1.首先查看重复数据

    SELECT
    	id,
    	user_name,
    	user_code,
    FROM
    	users 
    GROUP BY
    	user_name,
    	user_code
    

    注意:MySQL5.7以上默认开启了only_full_group_by模式,查询了非分组字段会报错
    windows打开my.ini直接删掉only_full_group_by这一项即可
    mac在my.cnf文件中下列代码到mysqld配置中
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    重启mysql服务就会生效

    2.选择最小的id

    SELECT 
    	MIN(id) 
    FROM 
    	users 
    GROUP BY 
    	user_code, user_name
    

    3.删除id不在最小id里的数据

    DELETE 
    FROM
    	users 
    WHERE
    	id NOT IN ( SELECT MIN( id ) FROM users GROUP BY user_code, user_name )
    

    直接写上面语句会报错,原因是:MySQL中不能同时查询和修改语句
    所以需要加入中间表查询

    DELETE 
    FROM
    	users 
    WHERE
    	id NOT IN ( SELECT temp.min_id FROM ( 
    	SELECT MIN(id) min_id FROM users GROUP BY user_code, user_name 
    	) AS temp)
    
    展开全文
  • 执行这个语句后,我们可以看到现在的结果里显示的就是表中重复数据的字段。 要删除这些重复的数据,我们找出这些数据的ID,在select语句里,添加id字段,使用max函数,可以得到重复数据最后面的id。 执行结果如图...
  • 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

     

     

    展开全文
  • 1.首先查看重复数据 SELECT  id,  user_name,  user_code, FROM  users  GROUP BY  user_name,  user_code 注意:MySQL5.7以上默认开启了only_full_group_by模式,查询了非分组字段会报错 windows...

     @开局警示:建议一步一步测试或重新建表测试,避免操作不当误删  

    DELETE 
    FROM
    	users
    WHERE
    	id NOT IN ( SELECT temp.min_id FROM ( 
    	SELECT MIN(id) min_id FROM t_cement_concrete_info GROUP BY produce_time
    	) AS temp);

     请编写一个SQL语句,清除表中垃圾数据
    1.首先查看重复数据

    SELECT
        id,
        user_name,
        user_code,
    FROM
        users 
    GROUP BY
        user_name,
        user_code

    注意:MySQL5.7以上默认开启了only_full_group_by模式,查询了非分组字段会报错
    windows打开my.ini直接删掉only_full_group_by这一项即可
    mac在my.cnf文件中下列代码到mysqld配置中
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    重启mysql服务就会生效

    2.选择最小的id

    SELECT 
        MIN(id) 
    FROM 
        users 
    GROUP BY 
        user_code, user_name

    3.删除id不在最小id里的数据

    DELETE 
    FROM
        users 
    WHERE
        id NOT IN ( SELECT MIN( id ) FROM users GROUP BY user_code, user_name )

    直接写上面语句会报错,原因是:MySQL中不能同时查询和修改语句
    所以需要加入中间表查询
    正确的操作在文章开头

     以下SQL经测试无误【文章开头的也可以用】

    DELETE
    FROM
    	table
    WHERE
    	id NOT IN (
    		SELECT
    			dt.minno
    		FROM
    			(
    				SELECT
    					MIN(id) AS minno
    				FROM
    					table
    				GROUP BY
    					id
    	) dt
    )

    @以下分享比较优秀的一篇

    @mysql删除重复记录并且只保留一条

    展开全文
  • 2、Havingwhere 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件不能包含聚组函数,使用where条件显示特定的行。having 子句的作用是筛选满足条件的组,即在分组之后...
  • 一般大家也许会碰到这个问题,大家可以参考下,讲的比较详细
  • mysql去除重复数据 根据one列查询重复的数据(根据单列判断重复) SELECT * FROM tab_test WHERE ONE IN (SELECT ONE FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1) ; 删除表中的重复记录:(根据单列...
  • mysql数据库去除重复数据的方法:1、查询需要删除的记录,会保留一条记录;2、删除重复记录,只保留一条记录,代码为【delete a from test1 a, (...)as bid from test1 c where..】。mysql数据库去除重复数据的方法...
  • Mysql删除表中重复数据,已解决

    万次阅读 2018-12-21 08:54:13
    如何快速删除数据表中重复【某个字段重复】的数据呢,比如我customer表中有一个cus_nmae字段,如果要删除cus_name字段的重复记录,且保留最小主键【这里customer的主键是cid】,首先想到的sql应该如下: DELETE ...
  • mysql去除表中重复数据 假设table1为原,有10条数据,其中5条重复,如果要去掉这5条重复的,只需要将table1里的数据去重后放到一张新tempTable,然后将tempTable重命名为table1即可 // 创建 tempTable,数据...
  • 的唯一查询用:distinct多的唯一查询用:group bydistinct 查询多时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余...
  • 这篇文章主要介绍了MySQL 去除重复数据实例详解的相关资料,需要的朋友可以参考下MySQL 去除重复数据实例详解有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。...
  • 去除mysql表中重复的的数据

    千次阅读 2018-09-30 16:10:14
    比如去除person表中重名的数据(实际判断行数据相同可能通过多个字段判断,这里只是通过name来确定) 一、将名字为张三数据去重; delete from person where name='张三' and id not in (select max(id) id from...
  • 对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法!方法一:防止表中出现重复数据表中未添加...
  • MySQL数据库删除重复记录的方法总结[推荐]
  • mysql清除表中重复数据 例子:我这是用户角色关联,根据用户id和角色id确认唯一一条数据 1:先查出重复数据,可以根据自己的需求更换sql的字段,或者增加条件 select a.role_id,a.USER_ACCOUNT_ID from c...
  •  通常情况下,一个我们在做一个产品的时候,一开始可能由于设计考虑不周或者程序写的不够严谨,某个字段上的值产生重复了,但是又必须去掉,这个时候就稍微麻烦了一点,直接加一个 UNIQUE KEY 肯定是不行了,因为...
  • 1、单个字段查询所有重复数据select * from ActivityWinUser where (UID) in(select UID from ActivityWinUser group by UID having count(*)>1);去重delete from table where Name in(select Name from table ...
  • 工作遇到MySQL对应系统表中存在脏数据的问题,重复的数据也属于脏数据的一种,如何去除表中重复数据,正确SQL如下: DELETE FROM pg_invoice_info_copy WHERE ( pg_invoice_code, pg_invoice_number, pg_...
  • MySQL 去除重复数据实例详解 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。对于第一种重复,比较容易解决,只需在查询语句使用distinct关键字去重,几乎所有...
  • delete from score where scoreId in( SELECT t.scoreId from ( select sc.scoreId as scoreId ...em.passScore group by s1.examCode,s1.studentId having count(*)> 1 ) ) t //此方法执行一次只能去除一个重复的 )
  • 本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...
  • //新建一张临时存单份不重复数据 create table temp as select DISTINCT * from A ; //清空原内容 delete from A; //把数据重新插入原 insert into A select * from temp; //删除临时 drop table temp; ...
  • mysql去除重复数据

    2021-02-08 02:39:31
    有时候数据库会不可避免的导入重复数据,我们就需要根据某些条件去确定哪些是重复数据,然后把它删除。创建如下 CREATE TABLE `first_table` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) ...
  • 像这种 删除重复数据的需求,我已经遇到过无数次了。简单总结下就是 先找出重复的记录满足的条件,然后把重复记录的id 给找出来 然后删除那些重复的id,用mysql 简单的说就是先 用where 在用group by 和 having ...
  • mysql去除重复数据

    2021-01-19 05:55:18
    1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张,会出现错误。mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );ERROR 1093 (HY000): You can’t ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,157
精华内容 26,862
关键字:

mysql去除表中重复数据

mysql 订阅