sql >> Database >  >> RDS >> PostgreSQL

SQL meerdere UNNEST in enkele selectielijst

Dit gaat niet over unnest als zodanig, maar over PostgreSQL's zeer vreemde behandeling van meerdere set-returning functies in de SELECT lijst. Set-return functies in SELECT maken geen deel uit van de ANSI SQL-standaard.

U zult merken dat uw gedrag veel gezonder is met LATERAL query's, die de voorkeur verdienen boven het gebruik van een functie die een set retourneert in FROM zoveel mogelijk:

select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;

bijv.

regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
 a | b 
---+---
 1 | 1
 1 | 2
 1 | 3
 2 | 1
 2 | 2
 2 | 3
(6 rows)

De enige keer dat ik nog steeds meerdere set-returning-functies gebruik in SELECT is wanneer ik waarden wil koppelen aan functies die beide hetzelfde aantal rijen retourneren. De noodzaak daarvoor zal verdwijnen in 9.4, met multi-argument unnest en met ondersteuning voor WITH ORDINALITY .




  1. Hoe controleer ik op dubbele kolomwaarden in de tabel voordat ik ze invoeg met Perl?

  2. Hoe meerdere id's toewijzen aan één rij in MySQL?

  3. Hoe UNCOMPRESS() werkt in MariaDB

  4. GWFG in Oracle RAC