PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да попълните външни ключове на таблица от други таблици

Това може да се опрости до:

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

Добавих ORDER BY клауза, която не ви е абсолютно необходима, но определени заявки може да са от полза, ако вмъкнете вашите данни, групирани по този (или друг) начин.

Ако искате да избегнете загубата на редове, където не можете да намерите съответстващ ред на language или template , направете го LEFT JOIN вместо JOIN и за двете таблици (при условие, че language_id и template_id може да бъде NULL .

В допълнение към това, което вече изброих под предварителен въпрос :Ако INSERT е огромен и съставлява голяма част от целевата таблица, вероятно е по-бързо да ИЗХВЪРЛЯТЕ всички индекси на целевата таблица и ги пресъздайте след това. Създаването на индекси от нулата е много по-бързо, отколкото да ги актуализирате постепенно за всеки ред.

Уникалните индекси допълнително служат като ограничения, така че ще трябва да прецените дали да наложите правилата по-късно или да ги оставите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres LIKE със стойност на колона като подниз

  2. Как да конфигурирам HikariCP за postgresql?

  3. Дълбоко гмуркане на доставчик на облак:PostgreSQL на AWS Aurora

  4. Получаване на стойност на колона от предишния ред в postgres не може да използва функцията за прозорец в UPDATE

  5. Android OS и postgreSQL