sqlserver,在两条完全相同纪录,同时列当中包含有text这种不能被distinct和group的字段,应该怎么去除重复行

最近做一个数据库的数据导入功能,发现联合主键约束导致不能导入,原因是源表中有重复数据,但是源表中又没有主键,很是麻烦。经过努力终于解决了,现在就来和大家分享一下,有更好的... 最近做一个数据库的数据导入功能,发现联合主键约束导致不能导入,原因是源表中有重复数据,但是源表中又没有主键,很是麻烦。经过努力终于解决了,现在就来和大家分享一下,有更好的办法的可以相互交流。
有重复数据主要有一下几种情况:
1.存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉
example: select distinct * from table(表名) where (条件)
2.存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])
3.没有唯一键ID
这种情况我觉得最复杂,目前我只会一种方法,有那位知道其他方法的可以留言,交流一下:
example:
select identity(int1,1) as id,* into newtable(临时表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])
drop table newtable
有更好的方法的欢迎大家相互交流.........
展开
 我来答
flex_kid
2013-01-11 · TA获得超过173个赞
知道答主
回答量:42
采纳率:0%
帮助的人:14.9万
展开全部
这个里面唯一的工作就是去重复,去重复的办法很多,关键的就是看效率问题咯,distinct, in, not in ,exists ,not exists.这些关键字,看楼主用的in,改用exists可能会提高一点效率,个人喜欢用exists,特别是大数据。小数据么,无所谓了。。呵呵。。因为在一定的情况下in会比exists执行效率高。建议工具里面增加对数据量大小的判断,然后再去组建不同的语句,可能会有很好的效果。对于in,exists在什么情况下效率的好坏,这个要测试滴。
185800961
2013-01-09 · 超过23用户采纳过TA的回答
知道答主
回答量:217
采纳率:0%
帮助的人:87.1万
展开全部
select distinct 列名1,列名2,……,列名n,convert(varchar,text列) from table(表名) where (条件)

text,ntext,image类型的字段作为分组依据,把它转换
追问
convert(varchar,text列) ,这样干是有风险的,sqlserver中varchar字段的长度最大为8000.

thanks for your answer!
已经决定不在数据库中干了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式