目的:去除(或删除)一个表里面手机号重复的数据,但是需要保留其中一个记录,换句话说,表里面手机号不为空的数据,一个手机有且只有一条记录

表结构:

CREATE TABLE `account` (
`id` int(11) NOT NULL,
`phone` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);

插入一些数据:

insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');
insert into account values('','');

查询一下现在表里面的重复情况:

select count(*)as num,phone from account where phone <> '' group by phone having num > 1;

查询结果:

现在我们要去除多余的手机号数据,直接把这个值置为空,删除同理,这里不再重复

SQL如下:

update account set phone='' where
phone in
(select phone from account where phone<>'' group by phone having count(id)>1)
and
id not in
(select min(id) from account where phone<>'' group by phone having count(id)>1)
;

但是执行的时候会报错:

update account set phone='' where phone in (select phone from account where phone<>'' group by phone having count(id)>1)and id not in(select min(id) from account where phone<>'' group by phone having count(id)>1)    
Error Code: 1093. You can't specify target table 'account' for update in FROM clause 0.031 sec

分析:不能先select出同一表中的某些值,再update这个表(在同一语句中)

重新写SQL(取下别名):

update account set phone='' where
phone in
(select a.phone from
(select phone from account where phone<>'' group by phone having count(id)> 1) as a
)
and
id not in
(select b.id from
(select min(id) as 'id' from account where phone<>'' group by phone having count(id)> 1) as b
)
;

执行完成之后我们再查一遍数据的情况:

select * from account;

查询结果(每个手机号只有一条记录,其他均被置空):

mysql处理重复数据仅保留一条记录的更多相关文章

  1. mysql 删除重复数据只保留一条记录

    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...

  2. mysql删除重复数据只保留一条

    mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...

  3. MySql删除重复数据并保留一条

    DELETE FROM tbl_1 WHERE id NOT IN( SELECT id FROM ( SELECT min(id) AS id FROM tbl_1 GROUP BY `duplic ...

  4. 面试题中经常遇到的SQL题:删除重复数据,保留其中一条

    如题,解决思路如下: 1.首先我们需要找出拥有重复数据的记录 ---以name字段分组 select Name,COUNT(Name) as [count] from Permission group ...

  5. oracle删除重复数据只保留一条

    -- 如表role_user的数据 ROLEID USERID -- 删除相同记录只剩下一条记录 根据两个字段查询重复数据 (roleid,userid) ) 删除重复数据只保留一条 delete f ...

  6. mysql删除重复数据,保留最新的那一条

    因为数据库没键外键,在关联查询的时候,会碰到查询条数多余数据库实际条数,这因为关联字段在表中有重复值而导致的. 解决方案: 1.数据库脚本删除重复数据,保留最新的一条 2.对关联字段增加唯一约束 例如 ...

  7. mysql语句删除重复数据,保留一条;查询所有重复数据;查询重复数据的一条,

    //显示重复的所有条 SELECT * FROM 表名 WHERE (字段1,字段2,...) IN (SELECT 字段1,字段2,...FROM 表名 GROUP BY 字段1,字段2,... H ...

  8. MySQL中删除重复数据只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...

  9. SQL Server 删除重复数据只保留一条

    DELETE FROM Bus_TerminalMessage_Keywords WHERE Content IN (select Content from Bus_TerminalMessage_K ...

随机推荐

  1. vue+java后台通信报403,cors解决跨域问题(该贴说的不是很清楚,不过大概如此,可再去网上查相关内容)

    前端是vue2.0,网络请求用的是axios,后端是springboot2.0 用axios向后端发送post请求,结果得到一个403无权限的错误,莫名其妙啊,我明明发送的是post请,但在chrom ...

  2. wine安装与配置

      1. 安装wine32dpkg --add-architecture i386 && apt-get update && apt-get install wine3 ...

  3. JMeter-性能测试之报表设定的注意事项

    在使用 Jmeter 执行性能测试时,需要屏蔽以下模块: 结果树 图形结果 断言 具体的说明,可以见官网:http://jmeter.apache.org/usermanual/component_r ...

  4. redis集群报错:(error) CLUSTERDOWN The cluster is down

    更换了电脑,把原来的电脑上的虚拟机复制到了新电脑上,启动虚拟机上的centos系统,然后启动redis集群(redis5版本),发现集群可以启动,redis进程也有,但是连接集群中的任意节点就报错,如 ...

  5. Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。

    maven使用: <!--redis jar包--> <dependency> <groupId>redis.clients</groupId> < ...

  6. Linux Crontab命令定时任务基本语法

    一.Crontab查看编辑重启 1.查看crontab定时执行任务列表 crontab -l 2.编辑crontab定时执行任务 crontab -e 3.删除crontab定时任务 crontab  ...

  7. EXP-00091和IMP-00010报错

    原来导出表的库:database ORACLE_SID=TEST0221 版本: 11.2.0.4需要导进的库:database ORACLE_SID=PROD 版本:10.2.0.1因为字符集的问题 ...

  8. 容器宽高不确定,图片宽高不确定,css如何实现图片响应式?

    图片响应式 在响应式开发中最烦恼的应该就是图片了,虽然图片设置max-width: 100%;可以让图片宽度占满容器,但是高度就不能自适应了.如果将容器高度限死,那么我们就要使用媒体查询来控制容器的高 ...

  9. s6tu

    # -*- coding: utf-8 -*- # @Time : 2018/03/30 15:20 # @Author : cxa # @File : liuuchnagtu.py # @Softw ...

  10. 轮询,WebSocket和P2P--记一次QQ交谈IM

    问题: