msql里有张表存有a,b两列,a存手机号,b存姓名,现在想剔除姓名重复的列,只保留姓名重复的其中一条记录

如ab1张三2张三两者只保留一个...
a b
1 张三
2 张三
两者只保留一个
展开
 我来答
badkano
2013-08-22 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144775 获赞数:885375
团长

向TA提问 私信TA
展开全部
delete from 表名 where a in (select min(a) from 表名 group by b)
追问
a 列为手机号 min 函数适用于它吗?
追答
恩,适用,min或max都可以
只要每个人的手机号不重复,上边这句不会有问题
yjr_aaron
2013-08-22 · 超过18用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:34万
展开全部
(1)delete from test where b in (select t1.b from (select t2.* from test as t2) as t1 group by b HAVING count(*) >1)
and a not in (select min(t3.a) from (select t4.* from test as t4) as t3 group by t3.b having count(*)>1 );
纯sql有点麻烦,上面那条可以实现,但数据一多性能不怎样

思路:获取到多条记录的b值;获取到重复记录中的a的最小值(这样才好保留一条记录);语句里面用了很多中间表,不能直接用test表,不然报错(删除过程中同时查找同个表)(2)新建一张相同的表,把b字段设置成唯一,然后再导数据进去,insert时使用ignore过滤掉重复的值。这种感觉挺好的,交给mysql处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式