pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Craig Ringer <craig@postnewspapers.com.au>
To: Karl Koster <kkoster@kdresources.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: unnest in SELECT
Date: Sun, 22 May 2011 11:23:44 +0800
Message-ID: <4DD881C0.9020401@postnewspapers.com.au> (raw)
In-Reply-To: <4DD6BD57.1080109@kdresources.com>
References: <4DD6BD57.1080109@kdresources.com>

On 05/21/2011 03:13 AM, Karl Koster wrote:
> I have a couple of questions regarding unnest.
>
> 1) If I issue a select statement "select unnest(vector1) as v from
> some_table", I cannot seem to use the column alias v in a WHERE or
> HAVING clause. I can use it in an ORDER BY or GROUP by clause. Is this
> the way it is supposed to work?

Yes, and it's what the SQL standard requires. Otherwise, how would this 
query work?

SELECT a/b FROM sometable WHERE b <> 0;

?

The SELECT list has to be processed only once the database has already 
decided which rows it applies to and how.

Use unnest in a FROM clause, eg:

SELECT v1.* FROM unnest(vector) ...

This may require a join and/or subquery to obtain 'vector'.

> 2) If I issue a select statement "select unnest(vector1) as v1,
> unnest(vector2) as v2 from some_table" and vector1 has a length of 3 and
> vector2 has a length of 4, the result set will have 12 rows with the
> data of vector1 repeating 4 times and vector2 repeating 3 times.
> Shouldn't the content of the shorter array(s) simply be return null in
> it's respective column and the result set be the size of the longest array?

unnest is a set-returning function, and it doesn't really make that much 
sense to have them in the SELECT list anyway. Few databases support it, 
and PostgreSQL's behavior is a historical quirk that I think most people 
here hope will go quietly away at some point.

Use unnest in a FROM clause.

--
Craig Ringer



view thread (4+ messages)

Message-ID: <4DD881C0.9020401@postnewspapers.com.au>
Permalink:  ../4DD881C0.9020401@postnewspapers.com.au/
Also on:    postgresql.org/message-id/4DD881C0.9020401@postnewspapers.com.au

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: craig@postnewspapers.com.au, kkoster@kdresources.com
  Subject: Re: unnest in SELECT
  In-Reply-To: <4DD881C0.9020401@postnewspapers.com.au>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox