2个回答
展开全部
(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处理
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处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询