From: | Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at> |
---|---|
To: | 'Nicklas Avén *EXTERN*' <nicklas(dot)aven(at)jordogskog(dot)no>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Different result depending on order of joins |
Date: | 2015-05-22 10:17:55 |
Message-ID: | A737B7A37273E048B164557ADEF4A58B36614DAD@ntex2010i.host.magwien.gv.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Nicklas Avén wrote:
> I was a little surprised by this behavior.
> Is this what is supposed to happen?
>
> This query returns what I want:
>
> with
> a as (select generate_series(1,3) a_val)
> ,b as (select generate_series(1,2) b_val)
> ,c as (select generate_series(1,1) c_val)
> select * from a
> inner join c on a.a_val=c.c_val
> full join b on a.a_val=b.b_val
> ;
>
> I get all values from b since it only has a full join and nothing else.
>
> But if I change the order in the joining like this:
>
> with
> a as (select generate_series(1,3) a_val)
> ,b as (select generate_series(1,2) b_val)
> , c as (select generate_series(1,1) c_val)
> select * from a
> full join b on a.a_val=b.b_val
> inner join c on a.a_val=c.c_val
> ;
>
> also b is limited to only return value 1.
>
> I thought that the join was defined by "on a.a_val=c.c_val"
> and that the relation between b and the rest wasn't affected by that last inner join.
>
> I use PostgreSQL 9.3.6
>
> Is this the expected behavior?
Yes.
In
http://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-JOIN
you can read:
"In the absence of parentheses, JOIN clauses nest left-to-right."
So the first query will first produce
a_val | c_val
-------+-------
1 | 1
and the FULL JOIN will add a row for b_val=2 with NULL a_val.
The second query will first produce
a_val | b_val
-------+-------
1 | 1
2 | 2
3 |
an since none but the first row matches a_val=1, you'll get only that row in the result.
Yours,
Laurenz Albe
From | Date | Subject | |
---|---|---|---|
Next Message | Nicklas Avn | 2015-05-22 10:46:27 | Re: Different result depending on order of joins |
Previous Message | Nicklas Avén | 2015-05-22 09:51:34 | Different result depending on order of joins |