PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Свързване на две таблици в сложна заявка (не еднообразни данни)

SELECT DISTINCT ON (1)
       t.id, d.address, d.id
FROM   data_table t
JOIN   dictionary d ON replace(d.address, ' ', '')
                 LIKE (replace(t.address, ' ', '') || '%')
ORDER  BY t.id, d.address, d.id

(ORDER BY актуализиран след актуализиране на въпроса.) Без ORDER BY той избира произволно съвпадение.
Обяснение за техниката в този свързан отговор:
Избиране на първия ред във всяка група GROUP BY?

Функционален индекс на вашия речник ще направи това бързо :

CREATE INDEX dictionary_address_text_pattern_ops_idx
ON dictionary (replace(address, ' ', '') text_pattern_ops);

Повече обяснение за това в отговора, който предоставих на предизвестен въпрос .

Може да се спори дали това ще ви донесе „най-доброто“ съвпадение. Една алтернатива би била съвпадение по сходство с индекс на триграма. Подробности в първата от връзките, които добавих към последния ви въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се свържете с Postgres чрез Node.js

  2. Как да дезинфекцираме необработения SQL в Rails 4

  3. Как да намерите интервала между две дати в PostgreSQL

  4. Как да създадете тригер за цялата таблица в postgresql?

  5. Кажете на потребителите си да се разклонят