2016-12-11 2 views
1

Я пытаюсь объединить данные из разных источников. Единственным общим полем для соединения является адрес. В таблице 1 адрес имеет дополнительные данные (представляющие окрестности) между улицей и штатом. Есть ли способ присоединиться к этим таблицам, используя самый похожий адрес? У меня 85 000 адресов, поэтому ручной поиск с использованием LIKE и подстановочных знаков не будет работать.PostgreSQL присоединяется к аналогичному адресу

Таблица 1:
"239 Дадли Сент Дадли Площадь Роксбери М.А. 02119"
"539 Дадли Сент-Дадли Площадь Роксбери М.А. 02119"

Таблица 2:
"239 Дадли Санкт-Роксбери М.А. 02119"
«539 Дадли Санкт-Роксбери М.А. 02119»

ответ

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; 
Смежные вопросы