sql >> Databáze >  >> RDS >> PostgreSQL

Jak naplnit cizí klíče tabulky z jiných tabulek

To lze zjednodušit na:

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

Přidal jsem ORDER BY klauzuli, kterou striktně nepotřebujete, ale určité dotazy mohou mít prospěch, pokud svá data vložíte takto (nebo jiným) způsobem.

Pokud se chcete vyhnout ztrátě řádků, kde nemůžete najít odpovídající řádek v language nebo template , nastavte LEFT JOIN místo JOIN pro obě tabulky (za předpokladu, že language_id a template_id může být NULL .

Kromě toho, co jsem již uvedl pod předběžná otázka :Je-li INSERT velký a tvoří velkou část cílové tabulky, je pravděpodobně rychlejší VYHNAT všechny indexy na cílovém stole a poté je znovu vytvořte. Vytváření indexů od začátku je hodně rychleji než je aktualizovat postupně pro každý řádek.

Jedinečné indexy navíc slouží jako omezení, takže budete muset zvážit, zda pravidla vynutit později, nebo je nechat na místě.



  1. PostgreSQL 12:Implementace indexů rozdělených zobecněných vyhledávacích stromů v prostoru K-Nearest Neighbor Space

  2. SQL Server INFORMATION_SCHEMA Zobrazení | Podívejte se, zda existuje tabulka

  3. Proč by Magento nedokázalo uložit zákazníka po vygenerování ID?

  4. Otázka v rozhovoru:Jak získat agregaci za poslední 3 měsíce na úrovni sloupců?