[SQL] Problem with nested left-joins and coalesce

2011-08-07 Thread ai
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

 



Re: [SQL] Problem with nested left-joins and coalesce

2011-08-08 Thread ai
Hi Carla!

 

Well, maybe I too simplified my production code and now I can't see
something very simple, BUT I'm pretty sure that there isn't  any original
column value2 in sub4 except that I created with COALESCE:

 

Meanwhile, I want to note, that I made a little mistake in presented
example: instead of "wrong" full example I wrote a "correct" one (but I'm
sure you understood this because of my further explanation of "workaround"
=))

 

My mistake =(( don't kill me - I spend too much time with this piece of code
today...

 

but just in case here is "wrong" (difference is in that "SELECT sub3.key3,
sub4.value2 FROM" ):

 

SELECT * FROM

(

SELECT 1 as key1

) sub1

LEFT JOIN 

(

SELECT sub3.key3, sub4.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

 

best regards,

alex

 

From: [email protected] [mailto:[email protected]]
On Behalf Of Carla
Sent: Monday, August 08, 2011 10:03 PM
To: ai
Cc: [email protected]
Subject: Re: [SQL] Problem with nested left-joins and coalesce

 

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 

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

 

 



Re: [SQL] [GENERAL] How to Get Column Names from the Table

2010-07-08 Thread AI Rumman
Use:

\d tablename


On Wed, Jul 7, 2010 at 3:08 PM, venkat  wrote:

> Dear All,
>
>How to get Column Names from Table in PostgreSQL.
>
> Thanks and Regards,
>
> Venkat
>