您的专属咨询通道

  • 求职者通道

    简历石沉大海,面试屡战屡败,你得从自身想想原因
  • 在职者通道

    跳槽?转行?离开了学校但你还拥有学习的激情
  • 大学生通道

    大学生,学历技能于一身,你的就业没问题
  • 高中生通道

    作为高中生的你,大学不是唯一的成才之路

在线QQ咨询

  • 点击这里给我发消息 学费咨询
  • 点击这里给我发消息 就业咨询
  • 点击这里给我发消息 学历咨询
  • 点击这里给我发消息 课程咨询

校园地址

  • 报名咨询: 0512-65566661
  • 地址:苏州市阊胥路483号
  • 创元科技园6号 楼1层

教您轻松删除SQL Server重复行

发布时间:2011-12-26 21:11:33  作者:丁鑫   来源:

SQL Server重复行问题相信大家都遇到过,下面就教您一个好方法,助您轻松删除SQL Server重复行,如果您遇到过SQL Server重复行问题,不妨一看。

1、如果这张表没有主键(或者相同的行并没有不相同的内容列),则需要新建一个自增列,用来区分不同列。例如
alter   table [tablename] add [TID] int IDENTITY(1,1)
就是增加一个自增量的临时列TID。
为啥要用SQL语句?如果超过几十万行的话用SQL SERVER企业管理器的设计界面修改通常会超时。

2、然后就是关键了。给个例子就是我手上正要处理的IP地址所在地清单。近40万条数据,有SIP和EIP(开始IP和结束IP)记录重复,重复条数大概占1/5左右。对此情况用简单的一条SQL命令就搞定:
delete from query_IP where TID not in (select max(TID) from query_IP group by SIP,EIP)
就是将SIP和EIP分组,取得同样分组的最大的TID值。

然后将原表中不在其中的内容(也就是同样分组的重复内容中更小的ID内容)删除即可。用这种思路可以延伸出很多SQL解题的方式。比如说某个用户登陆表,要查看每个用户最近的登陆记录。

很优雅的一条查询语句:
Select * from LoginLog where ID in (select max(ID) from LoginLog group by UserID)

SQL强大之极,许多复杂的需求往往可以合并到一条SQL语句查询中实现。因此在我的程序中除了UPDATE/INSERT等操作需要事务支持,或是记录量实在太大需要分页或临时表。通常都用一条SQL语句来实现。比如说select *,(select count(*) from xxx where xxx=t.ID) from t where...。这样就可以在SELECT语句中获取关联的统计项,对于中小型系统尤其实用。


苏州北大青鸟报名咨询:0512-65566661 65566662 备案许可证号:苏ICP备09076008号 苏州北大青鸟阊胥路标准化校区 | 苏州苏香信息技术有限公司 办学许可证号:劳社民3205013000041号 地址:苏州市阊胥路483号创元科技园6号楼1层(干将西路友通数码港向北100米) 苏州北大青鸟交通路线:6、7、 7路区间、64、70、88、262、300、303、304、307、318、332、333、333路龙池专线、522、800、921、932、949.(小日晖桥北站) 技术支持:苏州天络科技
在线客服
在线客服系统