超难问题!!!----------顶尖高手来帮忙!!!

testqqyouju 2015-12-15 11:18:04
深圳市华为科技有限公司
深圳华为科技有限公司
深圳华为科技公司
深圳市华为科技公司
深圳华为公司
深圳华为
-------
以上数据,误差了几个字,但其实都是1家公司.

==============================
现在有1个数据量很大的数据表,需要快速找出重复数据,然后删除重复信息.

这个问题,发到数据库板块合适吗?--如不行,发哪个版块合适些?
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgwyl 2015-12-17
  • 打赏
  • 举报
回复
要准确地话手工做比较好。 1、导出数据后,筛选“公司”字段的唯一性,得出一大堆公司名字。 2、根据实际情况进行排序,以便能让类似名字(实际上为同个公司)的名称在一起。 3、数据整理完整后,批量修改咯。 这东西要我做的话,导出数据到excel手工做可能会更快一些。
Yole 2015-12-15
  • 打赏
  • 举报
回复
引用 5 楼 ch21st 的回复:
我刚发完发现楼上的想法和我的想法接近
唐诗三百首 2015-12-15
  • 打赏
  • 举报
回复
100%智能判断并自动删除重复信息的方法应该没有,也有风险. 建议: 1.建立关键词字典表,如: 深圳,华为,广州,北京,上海... 2.针对每一条记录,按自定义算法,自动计算出匹配度的数值. 3.按匹配度排序,这样一些名称接近的就会排在一起. 4.人工确认,删除重复信息.
中国风 2015-12-15
  • 打赏
  • 举报
回复
最好把你所有情况都列出来 如果只是以上数据那好处理,处理完可用临时表缓存数据
select * from TableName as a where not exists(select 1 from TableName where replace(a.Name,'市','') like replace(Name,'市','')+'%' and len(Name)>len(a.Name))
中国风 2015-12-15
  • 打赏
  • 举报
回复
先查询以上保留数据对不 如果正确反向就是删除
DELETE A  from TableName as a where exists(select 1 from TableName where replace(a.Name,'市','') like replace(Name,'市','')+'%' and len(Name)>len(a.Name))
道素 2015-12-15
  • 打赏
  • 举报
回复
是不好弄,理论来说你这里涉及到名称中关键词匹配(如深圳,华为) 但不同的记录肯定关键词不同,还不如先过滤非关键词在匹配如(有限,公司..)但其实也能保证准确率 你可能还需要综合自己的其他属性值。 比如匹配地址信息(联系人,街道,城市,门牌号) 我的做法是综合以上信息,通过一个算法生成一个字符串的Key,然后根据这个StringKey比较
道素 2015-12-15
  • 打赏
  • 举报
回复
我刚发完发现楼上的想法和我的想法接近
Yole 2015-12-15
  • 打赏
  • 举报
回复

create table #tab
(
id int,
name varchar(50)
)

insert into #tab
select 1,'深圳市华为科技有限公司' union all
select 2,'深圳华为科技有限公司' union all
select 3,'深圳华为科技公司' union all
select 4,'深圳市华为科技公司'union all
select 7,'深圳华为公司' union all
select 6,'深圳华为' union all
select 5,'北京市大大公司' union all
select 10,'北京大大有限公司' union all
select 0,'北京市大大科技公司' 

select id,left(replace(name,'市',''),4),name,
ROW_NUMBER()over(PARTITION BY left(replace(name,'市',''),4) ORDER BY len(name) desc) as rw 

from #tab



drop table #tab

/*

(9 行受影响)
id                   name                                               rw
----------- -------- -------------------------------------------------- --------------------
0           北京大大     北京市大大科技公司                                          1
10          北京大大     北京大大有限公司                                           2
5           北京大大     北京市大大公司                                            3
1           深圳华为     深圳市华为科技有限公司                                        1
2           深圳华为     深圳华为科技有限公司                                         2
4           深圳华为     深圳市华为科技公司                                          3
3           深圳华为     深圳华为科技公司                                           4
7           深圳华为     深圳华为公司                                             5
6           深圳华为     深圳华为                                               6

(9 行受影响)
*/
--把rw是1的保留,其他的删掉.
Yole 2015-12-15
  • 打赏
  • 举报
回复

declare @str varchar(30)
set @str ='深圳市华为科技有限公司'

select left(replace(@str,'市',''),4)

/*
--------
深圳华为

(1 行受影响)
*/
可以试一下,把‘省市区县‘等字去掉,然后取前4个或者5个字段进行分组排序,然后加上序号,按您自己的规则删除(是保留最长的,还是保留最短的)。 但,这只是一个参考。
tcmakebest 2015-12-15
  • 打赏
  • 举报
回复
关键问题是不同的公司也就差一两个字,不是差异字数多少可以确定是不是同一家公司名称的.
xdashewan 2015-12-15
  • 打赏
  • 举报
回复
要想全自动不好搞,这东西涉及分词拆词类似搜索引擎,东西不多手动写几句sql搞搞得了

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧