cust表
| custid (pk) | 证件号码| 客户资料1|客户资料2|客户资料3现在的要求是把证件号码相同的记录,进行合并,最新的客户资料1,2,3不为空就选择最新的客户资料,为空,就选择离它最近不为空的记录更新,同时还有些以custid为外键的表,合并后custid要进行更新
请问这个算法要怎么样才能高效率呢?
多谢大家
| custid (pk) | 证件号码| 客户资料1|客户资料2|客户资料3现在的要求是把证件号码相同的记录,进行合并,最新的客户资料1,2,3不为空就选择最新的客户资料,为空,就选择离它最近不为空的记录更新,同时还有些以custid为外键的表,合并后custid要进行更新
请问这个算法要怎么样才能高效率呢?
多谢大家
再更新外键表数据custid为最终保留的custid
最后删除cust表非保留记录
-----------------------------------------------------
基本思路:先合并cust表证件号码重复的记录
再更新外键表数据custid为最终保留的custid
最后删除cust表非保留记录
---------------------------------------------------合并cust证件号码重复的算法过程是什么呢?
1、 客户资料1|客户资料2|null
2、 客户资料1|客户资料2|null
3、 客户资料1|客户资料2|null
这3条记录怎么合并呢?是合并成2条,还是不合并?合并了那些关联资料又怎么办呢?
搞不懂。假如:
1、 客户资料1|客户资料2|null
2、 客户资料1|客户资料2|null
3、 客户资料1|客户资料2|null
这3条记录怎么合并呢?是合并成2条,还是不合并?合并了那些关联资料又怎么办呢?
-----------------------------------------------------------如果这3条记录的证件号码相同,更新的时候,取max(custid)的记录更新
也就是 custid=3 客户资料1|客户资料2|null,其他与custid=1,custid=2关联的记录,更新custid=3,同时删除
1、 客户资料1|客户资料2|null
2、 客户资料1|客户资料2|null
1、证件号码1 客户资料1|客户资料2|客户资料3
2、证件号码1 null |客户资料2|null
3、证件号码1 客户资料1| null |null应该取 第3条的客户资料1 和 第2条的客户资料2 和 第1条的客户资料3 作为该证件号码最后应该保留的记录.这个情况有时的确会出现.用存储过程一步步去写肯定可以,用一条语句似乎不太可能.
楼主的意思也应该是明白的,只是想求个高效的方法.这就不好说了.
custid(pk) 证件号码info
infoid(pk) custid(fk) 客户资料
对,需求和你说的是一样的~~
目前的情况是,这个表里已经有这样的数据了,而且很多,即使我这次合并了,后面还会不断增加类似的记录,所以希望大家一起探讨出一个效率高的算法,做个线程,定时执行
你说话也太偏激了。
这不一定是设计的问题啊,给你说个场景:比如以前是分布式数据库,现在集中了,自然就出现了楼主说的这种情况。这个题目其实非常有意思,可以考验大家数据库基本功。
大家都开动脑筋,帮楼主想下吧。
你可能没做过类似的系统,给你举我以前做的例子吧。
数据库开始是每个点一个,后来数据集中到一个地方,我就给每个地方的custid前面加一个头,比如第一个点的custid变成 01XXXXX,第二个点变成02XXXXX。
合并之后就有重复的数据了!
theforever(碧海情天)
谢谢2位热情讨论
发现的问题的确是这样:
“如果简单地把各分站的数据全都抓取过来,再进行筛选,对效率和资源的浪费简直不可想像”
所以,我们以后从业务上重新做了要求,各分站首先要自己合并,再与中央数据库同步,不会再把所有的数据都收集进这个表里面来了