PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menggabungkan dua tabel dalam kueri yang kompleks (bukan data yang seragam)

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rake db:jangan bersihkan meja lama saya

  2. Tanda kurung siku pada nama tabel/kolom tidak didukung?

  3. Bagaimana cara mengizinkan hanya satu baris untuk sebuah tabel?

  4. Bagaimana cara mengonversi presisi ganda postgres ke numerik tanpa kehilangan/pemotongan data

  5. Ciutkan beberapa baris array jika array tumpang tindih