PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wypełnić klucze obce tabeli z innych tabel

Można to uprościć do:

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

Dodałem ORDER BY klauzula, której nie potrzebujesz, ale niektóre zapytania mogą przynieść korzyści, jeśli wstawisz dane w taki (lub inny) sposób.

Jeśli chcesz uniknąć utraty wierszy, w których nie możesz znaleźć pasującego wiersza w language lub template , zrób to LEFT JOIN zamiast JOIN dla obu tabel (pod warunkiem, że language_id i template_id może być NULL .

Oprócz tego, co już wymieniłem pod pytaniem wstępnym :Jeśli INSERT jest ogromny i stanowi dużą część tabeli docelowej, prawdopodobnie szybciej UPUŚCIĆ wszystkie indeksy w tabeli docelowej, a następnie odtwórz je. Tworzenie indeksów od podstaw to dużo szybciej niż aktualizować je stopniowo dla każdego wiersza.

Unikalne indeksy dodatkowo służą jako ograniczenia, więc musisz zastanowić się, czy egzekwować reguły później, czy pozostawić je na miejscu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pyspark:Usuń pusty znak UTF z ramki danych pyspark

  2. Systemy plików Linux i testy punktów kontrolnych PostgreSQL

  3. Wystąpił wyjątek DBConcurrency podczas aktualizacji za pomocą adaptera danych

  4. Czy PostgreSQL utrzymuje stałe ładowanie swoich interpreterów pl*?

  5. Jak dołączyć do stołów na regex