环境描述:
工作中,我们经常会碰到各种各样奇葩的数据库表设计,碰到后当然免不了鄙视或感叹坑爹云云,但是茶余饭后酒过三巡,还是得蛋疼的接着去处理问题,今天就来蛋疼下SqlServer怎么删除重复数据。
栗子如下:
=================================华丽的分割线==================================
数据库表设计及现有数据(看到了吧,没有自增ID,没有主键,啥都没有。。。):
然后怎么去除重复数据呢??步骤如下:
1.没有自增ID,那我们就给它加吧,反正加了又不会怀孕,放心大胆的加吧,反正也是加,干脆一不做二不休,主键自增统统上。
2.加了主键自增ID之后,我们来看下现在的数据(哎呦我擦嘞,sqlserver好神奇,ID的值直接自动加上了,不禁感叹一声“噢耶”):
3.既然每行唯一标识都有了,想来剩下的步骤各位看官肯定妥妥的晓得该怎么做了,如果还是不晓得的话,那请继续往下看:
咱们直接通过SQL查询出去重后的结果集
SELECT MAX(id) as '最大标识ID',cc,name FROM [CustomerManage].[dbo].[test1] group by cc,name
4.既然需要的结果集我们已经找到了,那其余的杂七杂八数据我们就直接干掉它:
运行如下SQL
delete from [CustomerManage].[dbo].[test1] where Id not in
(
SELECT MAX(id)
FROM [CustomerManage].[dbo].[test1]
group by cc,name
)
查看结果集,果然看起来顺眼多了,老鼠屎都木有了。
5.看到这里,各位看官肯定说,你妹的,怎么还没完,不是TM都删完了吗?嘿嘿,各位看官啊,你们可真是太单纯了,我们一定要秉承着负责任的态度去为客户办事啊,万一客户嫌我们私自给人家纯洁的数据库表加了一个字段,影响了人家的性能神马的,我们小小程序猿可承担不起这个巨大的风险啊。我们还是乖乖的把我们刚刚上面添加的主键自增ID干掉吧。
右键表>>设计>>右键Id列>>删除主键,删除列
删完之后查看结果集,恩恩,果然看起来一如既往的舒服
6.好吧好吧,没有了,这回真没有了,各位,,,山水有相逢,拜拜了您呐。。。