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

Unire due tabelle in una query complessa (dati non uniformi)

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 aggiornato dopo l'aggiornamento della domanda.) Senza ORDER BY sta selezionando una corrispondenza arbitraria.
Spiegazione della tecnica in questa risposta correlata:
Seleziona la prima riga in ogni gruppo GROUP BY?

Un indice funzionale sul tuo dizionario lo renderebbe veloce :

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

Maggiori spiegazioni per questo nella risposta che ho fornito alla domanda preliminare .

Si potrebbe discutere se questo ti dà la "migliore" partita. Un'alternativa sarebbe una corrispondenza di somiglianza con un indice di trigramma. Dettagli nel primo dei link che ho aggiunto alla tua ultima domanda.