Re: generate_series

From: Thom Brown <thom(at)linux(dot)com>
To: YAMAMOTO Takashi <yamt(at)mwd(dot)biglobe(dot)ne(dot)jp>
Cc: pgsql-novice(at)postgresql(dot)org
Subject: Re: generate_series
Date: 2011-02-15 09:55:04
Message-ID: AANLkTin7htJXDVYmNJiXo0uTXA+zgGKAOp0W1kc7xXyz@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On 15 February 2011 02:06, YAMAMOTO Takashi <yamt(at)mwd(dot)biglobe(dot)ne(dot)jp> wrote:
> hi,
>
> the following behaviour of multiple generate_series in a select seems
> a little counter-intuitive to me.  i expected that the former returns 4 rows.
> where should i look to learn the exact semantics?  (documentation and/or code)
>
> YAMAMOTO Takashi
>
> test=# select generate_series(1,2) as a,generate_series(1,2) as b;
>  a | b
> ---+---
>  1 | 1
>  2 | 2
> (2 rows)
>
> test=# select generate_series(1,2) as a,generate_series(1,3) as b;
>  a | b
> ---+---
>  1 | 1
>  2 | 2
>  1 | 3
>  2 | 1
>  1 | 2
>  2 | 3
> (6 rows)

The output of such queries will keep producing output until all
generate_series functions are at their end simultaneously. I think
this may be due to none of the functions actually getting to decide
when the series ends unless it's unanimous... or something like that.

If you're looking for the first one to product 4 rows as its output,
you may actually want:

postgres=# select * from generate_series(1,2) as a,generate_series(1,2) as b;
a | b
---+---
1 | 1
1 | 2
2 | 1
2 | 2
(4 rows)

If you select FROM generate_series, they start getting treated like
tables, and you end up with a cartesian product.

--
Thom Brown
Twitter: @darkixion
IRC (freenode): dark_ixion
Registered Linux user: #516935

In response to

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Tom Lane 2011-02-15 15:47:35 Re: generate_series
Previous Message YAMAMOTO Takashi 2011-02-15 02:06:46 generate_series