删除sqlserver:SQL SERVER 删除重复内容行

对于重复行删除问题网上很难找到合适答案问问题不少但在搜索引擎中草草地看了下前面记录都没有解决方案
其实这个问题可以很华丽解决
1、如果这张表没有主键(或者相同行并没有不相同内容列)则需要新建个自增列用来区分区别列例如
复制代码 代码如下:

alter table [tablename] add [TID] 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语句中获取关联统计项对于中小型系统尤其实用
Tags:  删除sqlserver2005 sqlserver删除列 sqlserver删除表 删除sqlserver

延伸阅读

最新评论

发表评论