sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man fyller i en tabells främmande nycklar från andra tabeller

Detta kan förenklas till:

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

Jag lade till en ORDER BY klausul som du strikt sett inte behöver, men vissa frågor kan tjäna om du infogar dina data klustrade på det (eller något annat) sätt.

Om du vill undvika att tappa rader där du inte kan hitta en matchande rad på language eller template , gör det till LEFT JOIN istället för JOIN för båda tabellerna (förutsatt att language_id och template_id kan vara NULL .

Utöver det jag redan har listat under förhandsfrågan :Om INSERT är enormt och utgör en stor del av måltabellen är det förmodligen snabbare att SLAPPA alla index på målbordet och återskapa dem efteråt. Att skapa index från början är mycket snabbare än att uppdatera dem stegvis för varje rad.

Unika index fungerar dessutom som begränsningar, så du måste överväga om du ska tillämpa reglerna senare eller lämna dem på plats.



  1. Inte unik tabell/alias

  2. mysql motsvarande datatyper

  3. docker compose MySQL container [2002] Anslutningen vägrades

  4. ORA-02267:kolumntyp inkompatibel med refererad kolumntyp