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.