mysql处理重复数据仅保留一条记录
目的:去除(或删除)一个表里面手机号重复的数据,但是需要保留其中一个记录,换句话说,表里面手机号不为空的数据,一个手机有且只有一条记录
表结构:
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处理重复数据仅保留一条记录的更多相关文章
- mysql 删除重复数据只保留一条记录
删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...
- mysql删除重复数据只保留一条
mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...
- MySql删除重复数据并保留一条
DELETE FROM tbl_1 WHERE id NOT IN( SELECT id FROM ( SELECT min(id) AS id FROM tbl_1 GROUP BY `duplic ...
- 面试题中经常遇到的SQL题:删除重复数据,保留其中一条
如题,解决思路如下: 1.首先我们需要找出拥有重复数据的记录 ---以name字段分组 select Name,COUNT(Name) as [count] from Permission group ...
- oracle删除重复数据只保留一条
-- 如表role_user的数据 ROLEID USERID -- 删除相同记录只剩下一条记录 根据两个字段查询重复数据 (roleid,userid) ) 删除重复数据只保留一条 delete f ...
- mysql删除重复数据,保留最新的那一条
因为数据库没键外键,在关联查询的时候,会碰到查询条数多余数据库实际条数,这因为关联字段在表中有重复值而导致的. 解决方案: 1.数据库脚本删除重复数据,保留最新的一条 2.对关联字段增加唯一约束 例如 ...
- mysql语句删除重复数据,保留一条;查询所有重复数据;查询重复数据的一条,
//显示重复的所有条 SELECT * FROM 表名 WHERE (字段1,字段2,...) IN (SELECT 字段1,字段2,...FROM 表名 GROUP BY 字段1,字段2,... H ...
- MySQL中删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...
- SQL Server 删除重复数据只保留一条
DELETE FROM Bus_TerminalMessage_Keywords WHERE Content IN (select Content from Bus_TerminalMessage_K ...
随机推荐
- 2、Jmeter测试
一.测试流程 1.添加本次测试计划 (右键-->添加-->Threads(Users)-->线程组) 2.设置线程数 (所谓线程数就是并发用户数) 3.在线程组内添加请求(右键--& ...
- Informatica ODBC的使用
1.在服务器端配置odbc.ini 注意:添加环境变量才能生效 2.测试连通性 3.使用
- selenium下拉一个框内的滚动条
js='document.getElementsByClassName("route-tree")[0].scrollTop=10000'
- [thinkphp 5.0源码阅读] 缓存(一)
保存缓存: user表数据: cache()方法保存缓存: 访问 http://mythinkphp.com/index/index/cache ,两个缓存被保存(runtime/cache目录下): ...
- vue 自定义封装组件 使用 model 选项
自定义组件的 v-model 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框.复选框等类型的输入控件可能会将 value 特性用于不同 ...
- MAN PVCREATE
PVCREATE(8) PVCREATE(8) NAME/名称 pvcreat ...
- [洛谷 P1377] TJOI2011 树的序
问题描述 众所周知,二叉查找树的形态和键值的插入顺序密切相关.准确的讲:1.空树中加入一个键值k,则变为只有一个结点的二叉查找树,此结点的键值即为k:2.在非空树中插入一个键值k,若k小于其根的键值, ...
- Test 3.27 T2 旅行
Description FGD 想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说 FGD 不希望在刚吃过一顿 ...
- asp.net大文件断点续传
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- 【テンプレート】LCA
LCA目前比较流行的算法主要有tarjian,倍增和树链剖分 1)tarjian 是一种离线算法,需要提前知道所有询问对 算法如下 1.读入所有询问对(u,v),并建好树(建议邻接表) 2.初始化每个 ...