PostgreSQL加入类似地址

时间:2016-12-11 18:58:22

标签: postgresql inner-join street-address

我正在尝试加入来自不同来源的数据。要加入的唯一常见字段是地址。在表1中,地址具有街道和州之间的额外数据(表示邻域)。有没有办法使用最相似的地址加入这些表?我有85,000个地址,因此使用LIKE和通配符进行手动搜索将无法正常工作。

表1:
" 239 Dudley St Dudley Square Roxbury MA 02119"
" 539 Dudley St Dudley Square Roxbury MA 02119"

表2:
" 239 Dudley St Roxbury MA 02119"
" 539 Dudley St Roxbury MA 02119"

1 个答案:

答案 0 :(得分:0)

我有两点建议:

1)“表2地址中的所有单词都出现在表1地址”:

select *
from t1 join
  t2 on (string_to_array(t2.address,' ') <@ string_to_array(t1.address,' '));

2)“对于每个表1地址,从表2中找到最相似的地址”:

select distinct on(t1.address) *
from t1 cross join t2
order by t1.address, similarity(t1.address, t2.address) desc;