PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Łączenie dwóch tabel w złożonym zapytaniu (nie jednolitych danych)

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 aktualizacja po aktualizacji pytania). Bez ORDER BY wybiera dowolne dopasowanie.
Wyjaśnienie techniki w tej powiązanej odpowiedzi:
Wybrać pierwszy wiersz w każdej grupie GROUP BY?

Funkcjonalny indeks w Twoim słowniku uczyniłby to szybko :

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

Więcej wyjaśnień w odpowiedzi, której udzieliłem na pytanie wstępne .

Można by dyskutować, czy dzięki temu uzyskasz „najlepsze” dopasowanie. Jedną z alternatyw byłoby dopasowanie podobieństwa z indeksem trygramu. Szczegóły w pierwszym z linków, które dodałem do Twojego ostatniego pytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównanie wydajności i cen PostgreSQL DigitalOcean — ScaleGrid i zarządzane bazy danych DigitalOcean

  2. Transakcja wewnątrz funkcji plpgsql

  3. Problem z porządkowaniem znaków akcentowanych w PostgreSQL 8.4

  4. Jak Asind() działa w PostgreSQL

  5. Zarządzanie wysoką dostępnością w PostgreSQL – Część III:Patroni