sql >> Database >  >> RDS >> PostgreSQL

Hoe de externe sleutels van een tabel uit andere tabellen te vullen

Dit kan worden vereenvoudigd tot:

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

Ik heb een ORDER BY . toegevoegd clausule die u niet strikt nodig hebt, maar bepaalde zoekopdrachten kunnen nuttig zijn als u uw gegevens op die (of een andere) manier geclusterd invoert.

Als u wilt voorkomen dat u rijen kwijtraakt waar u geen overeenkomende rij kunt vinden in language of template , maak het LEFT JOIN in plaats van JOIN voor beide tabellen (op voorwaarde dat language_id en template_id kan NULL zijn .

Naast wat ik al heb vermeld onder de prequelvraag :Als de INSERT enorm is en een groot deel van de doeltabel vormt, is het waarschijnlijk sneller om alle indexen DROP te zetten op de doeltafel en maak ze daarna opnieuw. Het maken van indexen is veel sneller dan ze stapsgewijs bij te werken voor elke rij.

Unieke indexen dienen bovendien als beperkingen, dus u moet overwegen of u de regels later wilt handhaven of laten gelden.



  1. Hoe maak je een varchar2-veld korter in Oracle?

  2. 5 goede redenen om Microsoft Access-sjablonen te downloaden en te gebruiken

  3. Hoe sql_mode instellen in my.cnf in MySQL 8?

  4. AbstractMethodError op resultset.getObject