Hi Alex!
When you wrote "COALESCE(sub6.value1, 1) as value2", you created a column
"value2" that is different of the original column "sub4.value2".
Try running "SELECT sub3.key3, sub4.value2, value2 FROM ..." and you'll get
the result:

key1;key3;value2;value2
1;1;null;1
It happens because the first column "value2" (i.e. "sub4.value2") doesn't
have COALESCE on it.


2011/8/8 ai <lis...@mail.ru>

> Hi!****
>
> I have strange issue with nested left-joins in postgresql...****
>
> It's hard to explain, but easy to show =)****
>
> here we are:****
>
> ** **
>
> SELECT * FROM****
>
> (****
>
>                 SELECT 1 as key1****
>
> ) sub1****
>
> LEFT JOIN ****
>
> (****
>
>                 SELECT sub3.key3, value2 FROM****
>
>                 (****
>
>                                SELECT 1 as key3****
>
>                 ) sub3****
>
>                 LEFT JOIN ****
>
>                 (****
>
>                                SELECT sub5.key5, COALESCE(sub6.value1, 1)
> as value2****
>
>                                FROM****
>
>                                (****
>
>                                                SELECT 1 as key5****
>
>                                ) sub5****
>
>                                LEFT JOIN****
>
>                                (****
>
>                                                SELECT 1 as key6, value1***
> *
>
>                                                FROM****
>
>                                                (****
>
>                                                                SELECT
> NULL::integer as value1****
>
>                                                ) sub7****
>
>                                                WHERE false****
>
>                                ) sub6 ON false****
>
> ** **
>
>                 )****
>
>                 sub4 ON sub4.key5=sub3.key3****
>
> )****
>
> sub2 ON sub1.key1 = sub2.key3****
>
> ** **
>
> The result of this query:****
>
> key1;key3;value2****
>
> 1;1;NULL****
>
> ** **
>
> And this is the problem - value2 can't be NULL because of COALESCE in sub4
> (at least I think that it can't be =))****
>
> Anyway if we'll change ****
>
> SELECT sub3.key3, sub4.value2 FROM****
>
> with****
>
> SELECT sub3.key3, value2 FROM****
>
> we will got correct result:****
>
> key1;key3;value2****
>
> 1;1;1****
>
> Is there something wrong with my mind&hands? or is it a bug?****
>
> ** **
>
> Thanks in advance!****
>
> ** **
>
> Kind regards****
>
> Alex****
>
> ** **
>

Reply via email to