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

PostgreSQL se uneste s prázdným polem

select id, 
       case 
         when int_values is null or array_length(int_values,1) is null then null
         else unnest(int_values)
       end as value
from the_table;

(všimněte si, že jsem sloupec přejmenoval na values na int_values jako values je vyhrazené slovo a nemělo by se používat jako název sloupce).

SQLFiddle:http://sqlfiddle.com/#!1/a0bb4/1

Postgres 10 neumožňuje použití unnest() ještě takhle.

Musíte použít boční spojení:

select id, t.i
from the_table
   cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);

Online příklad:http://rextester.com/ALNX23313

Lze to ještě více zjednodušit, když místo křížového spojení použijete levé spojení:

select id, t.i
from the_table
 left join lateral unnest(int_values) as t(i) on true;

Online příklad:http://rextester.com/VBO52351



  1. Role DBA v NoSQL

  2. MySQL:Aktualizace všech řádků nastavením pole na 0, ale nastavením pole jednoho řádku na 1

  3. Po odeslání formuláře pomocí php a jquery ajax nelze vložit data do databáze

  4. Jak převést sloupec časového razítka SQL Serveru do formátu datetime