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

Zbiorcza aktualizacja w postgreSQL za pomocą unnest

Dzwonisz unnest 3 razy na FROM klauzula, co oznacza, że ​​wykonujesz CROSS JOIN (produkt kartezjański) 3.

Jeśli korzystasz z PostgreSQL 9.4 lub nowszego, możesz po prostu wykonać jedno wywołanie unnest podając każdą tablicę jako dane wejściowe:

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)

Inną opcją, dla dowolnej wersji, jest dodanie wywołania do unnest w SELECT zamiast 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

W obu przypadkach, ale szczególnie w ostatnim, musisz upewnić się, że każda tablica ma dokładnie taką samą liczbę elementów. Jeśli tak nie jest w pierwszej metodzie, każdy brakujący wiersz zostanie wypełniony jako NULL, ale drugi zwróci tyle wierszy, ile LCM liczby wierszy zwracanych przez każdy, czego prawdopodobnie nie chcesz. Przykład:

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)

Zapoznaj się z dokumentacją wywołaniami funkcji tabel aby uzyskać więcej informacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja bazy danych do PostgreSQL w wersji 10 — co powinieneś wiedzieć

  2. Instalowanie sterowników PDO dla PostgreSQL na Macu (używając Zend dla Eclipse)

  3. Nie można po prostu użyć nazwy tabeli PostgreSQL (relacja nie istnieje)

  4. Utwórz tablicę int8[] w ​​funkcji PostgreSQL C

  5. przekazać nieznaną liczbę parametrów do klauzuli IN za pomocą JDBC i Postgres