sql >> Databáze >  >> RDS >> PostgreSQL

Spojení dvou tabulek ve složitém dotazu (nejednotná data)

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 aktualizováno po aktualizaci otázky.) Bez ORDER BY vybírá libovolnou shodu.
Vysvětlení techniky v této související odpovědi:
Vybrat první řádek v každé skupině GROUP BY?

Funkční index ve vašem slovníku by to urychlil :

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

Další vysvětlení v odpovědi, kterou jsem poskytl na předběžnou otázku .

Dalo by se diskutovat o tom, zda to pro vás bude "nejlepší" zápas. Jednou z alternativ by byla podobnostní shoda s trigramovým indexem. Podrobnosti v prvním z odkazů, které jsem přidal k vaší poslední otázce.



  1. Chyba výstupu SQL Fiddle

  2. Nainstalujte MariaDB na Mac

  3. Jak vytvořím dotaz UNION pomocí ORDER BY a GROUP BY v nástroji pro vytváření dotazů Kohana?

  4. PHP:Zobrazit dialog pro potvrzení ano/ne