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
cập nhật sau khi cập nhật câu hỏi.) Không có ORDER BY
nó đang chọn một kết hợp tùy ý.
Giải thích cho kỹ thuật trong câu trả lời có liên quan này:
Chọn hàng đầu tiên trong mỗi nhóm GROUP BY?
Chỉ mục chức năng trên từ điển của bạn sẽ giúp việc này trở nên nhanh chóng :
CREATE INDEX dictionary_address_text_pattern_ops_idx
ON dictionary (replace(address, ' ', '') text_pattern_ops);
Giải thích thêm cho điều đó trong câu trả lời mà tôi đã cung cấp cho câu hỏi trước .
Người ta có thể tranh luận nếu điều đó giúp bạn có được kết quả phù hợp nhất. Một thay thế sẽ là một kết hợp tương tự với một chỉ số bát quái. Chi tiết trong liên kết đầu tiên mà tôi đã thêm vào câu hỏi cuối cùng của bạn.