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

Групова актуализация в postgreSQL с помощта на unnest

Обаждате се на unnest 3 пъти на FROM клауза, това означава, че правите CROSS JOIN (декартово произведение) от 3.

Ако използвате PostgreSQL 9.4 или по-нова версия, можете просто да направите едно извикване на unnest даване на всеки масив като вход:

select * from 
         unnest(
            array['2001622', '2001624', '2007903'],
             array[15,14,8],
             array['type1', 'type1', 'type1'],
             array[false, true, true]
        ) as u(id, ver, type, enabled)

Друга опция, за всяка версия, е да добавите извикването към unnest в SELECT вместо FROM :

select
   unnest(array['2001622', '2001624', '2007903']) as id,
   unnest(array[15,14,8]) as ver,
   unnest(array['type1', 'type1', 'type1']) as type,
   unnest(array[false, true, true]) as enabled

И в двата случая, но особено в последния, трябва да сте сигурни, че всеки масив има точно същия брой елементи. Ако не стане при първия метод, всеки липсващ ред ще бъде попълнен като NULL, но вторият ще върне толкова реда, колкото LCM от броя на редовете, върнати от всеки, което вероятно не искате. Пример:

SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
 unnest | unnest 
--------+--------
      1 | a
      2 | b
      3 | c
      4 | d
 [null] | e
 [null] | f
(6 rows)

SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
 unnest | unnest 
--------+--------
      1 | a
      2 | b
      3 | c
      4 | d
      1 | e
      2 | f
      3 | a
      4 | b
      1 | c
      2 | d
      3 | e
      4 | f
(12 rows)

Проверете документацията за извиквания на таблични функции за повече информация.



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

  2. Преглед на програмирането от страна на сървъра в PostgreSQL

  3. Регистър на имената на таблиците и свойствата в Entity Framework 7 е без значение

  4. Използване на pt-pg-summary Percona Toolkit за PostgreSQL

  5. Проста настройка за репликация на Slony-I.