标题:怎么写一条SQL语句删除因某一字段内容相同而多余的记录?
只看楼主
ice360
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-3-6
 问题点数:0 回复次数:4 
怎么写一条SQL语句删除因某一字段内容相同而多余的记录?
sql2005中,怎么写一条SQL语句删除因某一字段内容相同而多余的记录?任意留一条记录即可,(如果可以的话最好能留住各个字段内容最全的哪一条!)
搜索更多相关主题的帖子: SQL 字段 语句 记录 删除 
2007-03-09 09:03
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 

delete from table where chechsum(*) not in ( select max(checksum(*)) from table group by ziduan) 类似这样,自己去写写吧


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-09 10:32
ice360
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-3-6
得分:0 

这样不行,能说详细点吗?

2007-03-09 13:35
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
得分:0 

如果可以的话最好能留住各个字段内容最全的哪一条! 这个定义太模糊 而且只有你自己才知道什么叫内容最全

你给表加一个字段比如叫flag
然后你就得写代码找出内容最全的一条 把它的flag设置成Y (这个过程别人可帮不了你)
然后把所有的记录flag不等于Y的都删除就是了
再把flag这个字段从表中删除就是了

---------

如果是随便留一条就简单多了
按照2楼的说法 有可能不行


CHECKSUM
返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。

语法
CHECKSUM ( * | expression [ ,...n ] )

参数
*

指定在表的所有列上进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。不可比数据类型是 text、ntext、image、cursor 以及基本类型为前 4 个数据类型之一的 sql_variant。

expression

是除非可比数据类型之外的任何类型的表达式。

这个函数对于数据类型有限制。

我的方案是加一个Identity的字段 比如叫record_id

select field1,max(record_id) as record_id into #1 from table1 group by field1
delete table1 where record_id not in (select record_id from #1)


2007-03-09 16:13
lijaoo520
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-3-6
得分:0 
回复:(ice360)怎么写一条SQL语句删除因某一字段内容...

select 字段1,字段2 into #tmp1
from table where 条件(重复字段1,字段2) group by 字段1,字段2 having count(*)>=2

delete a
from table a
inner join #tmp1 b on a.字段1=b.字段1 and a.字段2=b.字段2

insert into table (字段1,字段2)
select 字段1,字段2 from #tmp1

drop table #tmp1

2007-03-10 09:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-123199-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061993 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved