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 ...
随机推荐
- Codeforces Round #426 (Div. 2) - A
题目链接:http://codeforces.com/contest/834/problem/A 题意:给定4个图标,某些图标经过顺时针/逆时针旋转90°后能得到另外一些图标.现在给你开始的图标和结束 ...
- gay绿论第一章两点注意事项
1.不可能事件的概率为0,但概率为0的事件不一定是不可能事件,例如从自然数中取一个数结果是1的概率,从极限角度看,分子是1,分母是∞,结果是0,但它显然是有可能发生的,所以不是不可能事件. 2.两事件 ...
- 线程工具类 - Semaphore(信号量)
Semaphore官方文档 一.使用信号量实现线程间的通信 /** * Demo:使用信号量实现线程间通信*/ public class SemaphoreDemo { public static v ...
- jQuery ajax上传文件实例
jQuery ajax上传文件实例 <form id="form" enctype="multipart/form-data"><input ...
- ajax传递对象到MVC控制器
1.view层中ajax写法: function Add2() { var model = new Object(); model.UserName = $('#UserName').val(); m ...
- 提示”The following modules are missing or built with a different engine version”
一台机器使用自行编译版本引擎修改了工程后,另一台机器也使用自行编译版本引擎编辑该工程,有时会出现标题的提示 解决办法: 打开\Engine\Binaries\Win64\UE4Editor.modul ...
- Winner
Winner 南昌邀请赛 暴力模拟 #include<bits/stdc++.h> using namespace std; struct Nod { int i; int a,b,c; ...
- [CSP-S模拟测试]:Reverse(模拟+暴力+剪枝)
题目描述 小$G$有一个长度为$n$的$01$串$T$,其中只有$T_S=1$,其余位置都是$0$.现在小$G$可以进行若干次以下操作: $\bullet$选择一个长度为K的连续子串($K$是给定的常 ...
- (转)Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
转:https://www.cnblogs.com/dunitian/p/4976077.html 平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunit ...
- Step3 - How to: Host and Run a Basic Windows Communication Foundation Service
This is the third of six tasks required to create a Windows Communication Foundation (WCF) applicati ...