sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenføjning af to tabeller i en kompleks forespørgsel (ikke ensartede 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 opdateret efter spørgsmålsopdatering.) Uden ORDER BY det er at vælge et vilkårligt match.
Forklaring på teknikken i dette relaterede svar:
Vælg første række i hver GROUP BY-gruppe?

Et funktionelt indeks på din ordbog ville gøre dette hurtigt :

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

Mere forklaring på det i det svar, jeg gav på det foreløbende spørgsmål .

Man kan diskutere, om det giver dig det "bedste" match. Et alternativ ville være et lighedsmatch med et trigramindeks. Detaljer i det første af de links, jeg tilføjede til dit sidste spørgsmål.



  1. Kan ikke oprette Eclipse Data Source til Oracle 12c ved hjælp af 12c jar. Men 11g virker

  2. Semikolon mangler efter udtrækning af DDL via ksh-script

  3. Hukommelsesgrænser i SQL Server 2016 SP1

  4. Konverter VARCHAR2 til tal