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
diperbarui setelah pembaruan pertanyaan.) Tanpa ORDER BY
itu memilih kecocokan sewenang-wenang.
Penjelasan untuk teknik dalam jawaban terkait ini:
Pilih baris pertama di setiap grup GROUP BY?
Indeks fungsional pada kamus Anda akan membuat ini cepat :
CREATE INDEX dictionary_address_text_pattern_ops_idx
ON dictionary (replace(address, ' ', '') text_pattern_ops);
Penjelasan lebih lanjut untuk itu dalam jawaban yang saya berikan untuk pertanyaan pendahuluan .
Orang mungkin berdebat apakah itu memberi Anda pasangan "terbaik". Salah satu alternatifnya adalah pencocokan kesamaan dengan indeks trigram. Detail di tautan pertama yang saya tambahkan ke pertanyaan terakhir Anda.