方法有很多,这里介绍两种
方法一、如果要保留id的最小值,例如:
数据:
执行sql:select count(*) as count ,name,id from ceshi group by name
&ampltimg
最后要删除的sql为:delete from ceshi where id not in (select count(*) as count ,name,id from ceshi group by name)
如果想保留id的最大值:
简单的办法是:delete from ceshi where id not in (select count(*) as count ,name,id from (select * from ceshi order by id desc) group by name)
如果想要删除的是两个列里面对应相同的数据,也就是说表里面有两条记录的name都是admin,要是只想保留其中一条的话,order by 的时候增加一个值即可,例如:
delete from ceshi where id not in (select count(*) as count ,name,id from ceshi group by name,email)
方法二、只需要把你这张表当成两张表来处理就行了。
DELETE p1 from TABLE p1, TABLE p2 WHERE p1.name = p2.name AND p1.email = p2.email AND p1.id <p2.id
这里有个问题,保留最新的那一条(也就是ID最小的那个)
上面的的语句,p1.id <p2.id,所以获取到的是id最大的,因为p1.id小于p2.id就会被删除,只有最大的值不满足。如果要获取id最小的那个,只需要把'<'改成'>'即可。
当然是用group by,count可以更精准控制重复n次的情况。
select a,b,c from table where b in (selct distinct b from table where c='3e') order by b这个是按照这个格式输出
5 d 3e
6 d 3e
4 e 3e
7 e 3e
1 w 3e
2 w 3e
另外你的意思描述不是很清楚
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)