谢谢大家的支持,如果用sql处理的话,换句话说,就是要先将B的每条记录拆分为table的形式,再逐一将A的每条记录也拆分为table的形式,然后select count(*) from A INNER JOIN B,取最大的count值,原理非常简单,但如果要循环1000000×3000次,这非得等几天不可,大家有没有更好的办法呢?例如,怎样才可以在B字段中挑选几个字作为select * from A 的条件。再具体一点:B的记录为“广州芳村区白云大道10号3楼”,怎样才能匹配到A表的“广东省广州市芳村区白云大道10号3座”呢?好像有点人工智能的味道,因为B的记录为人工采集,千差万别的,地址中的“栋,幢,楼”用人工一下就可以知道是同一样东西,但SQL查询不能识别。
B表 广州芳村区白云大道10号3楼 A表 广东省广州市芳村区白云大道10号3座(假定字段为A) 你可以首先定义一个表, 栋,幢,楼表示一样的东西,对市的区分,之类的, 按照市、街道、大道、号、楼进行分解 那么解析之后的Sql应该是 A.A like '%广州%' and A.A like '%芳村区%' and A.A like '%白云大道%' and A.A like '%10号%'总之,首先你得把拆分的依据定义出来,那些字眼是一样的意思定义出来,这样在分析数据 组装Sql依据,比价复杂,效率也不是太高
SELECT * FROM A WHERE 标准地址 like inStr || '%';
如果有数据,就返回
如果没有数据 把 inStr 砍掉最后一个字符,继续查询, 直到 查询到,或者砍完了也没有。
如果 表A的 字段:标准地址 上面,没有索引的话…… 当我没说,哈哈~
直接不行吗SELECT A.* FROM A JOIN B ON CHARINDEX(B.新增地址,A.标准地址)>0
数组的话你要循环多少遍啊,如果你不能修改SQL语句的话,可以先赋值到两个datatable中,然后循环一个datatable然后select另一个datatable的记录,如果存在则不添加到要输出的datatable中,如果不存在则添加到新的datatable中,最后把另一个datatable的数据全部加到输出的datatable中就OK了,不过执行效率会很低。
A表 广东省广州市芳村区白云大道10号3座(假定字段为A)
你可以首先定义一个表,
栋,幢,楼表示一样的东西,对市的区分,之类的,
按照市、街道、大道、号、楼进行分解
那么解析之后的Sql应该是
A.A like '%广州%' and A.A like '%芳村区%'
and A.A like '%白云大道%' and A.A like '%10号%'总之,首先你得把拆分的依据定义出来,那些字眼是一样的意思定义出来,这样在分析数据
组装Sql依据,比价复杂,效率也不是太高