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

Cara mengisi kunci asing tabel dari tabel lain

Ini dapat disederhanakan menjadi:

INSERT INTO translation (id, translated, language_id, template_id)
SELECT tmp.id, tmp.translated, l.id, t.id
FROM   tmp_table tmp
JOIN   language l USING (langname)
JOIN   template t USING (tplname, source, domain)
ORDER  BY tmp.id

Saya menambahkan ORDER BY klausa yang sebenarnya tidak Anda perlukan, tetapi kueri tertentu mungkin menguntungkan jika Anda memasukkan data yang dikelompokkan dengan cara itu (atau lainnya).

Jika Anda ingin menghindari kehilangan baris di mana Anda tidak dapat menemukan baris yang cocok dalam language atau template , buat LEFT JOIN alih-alih JOIN untuk kedua tabel (asalkan language_id dan template_id bisa NULL .

Selain apa yang sudah saya cantumkan di bawah pertanyaan prekuel :Jika INSERT sangat besar dan merupakan bagian besar dari tabel target, mungkin lebih cepat untuk MENHAPUS semua indeks pada tabel target dan buat ulang setelahnya. Membuat indeks dari awal adalah banyak lebih cepat daripada memperbaruinya secara bertahap untuk setiap baris.

Indeks unik juga berfungsi sebagai batasan, jadi Anda harus mempertimbangkan apakah akan menerapkan aturan nanti atau membiarkannya di tempat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hilangkan duplikat kota dari database

  2. Kunci Asing untuk hubungan satu-ke-semua

  3. Spring Boot REST · @Constraint untuk dihapus?

  4. Bagaimana cara memetakan kolom stempel waktu ke tipe JPA?

  5. Rails menyertakan kueri dengan kondisi tidak mengembalikan semua hasil dari tabel kiri