Thread: Strange interaction of union and expressions
Hello all, We noticed some very odd behavior today with Postgres 7.4.5 Running the following SQL: create table a (foo varchar); insert into a (foo) values ('baz'); create table b (foo varchar); insert into b (foo) values ('woof'); select '"' || foo || '"' as foo from (select foo from a) as bar union select foo from b; Produces this output: foo ------- "baz" woof (2 rows) I would expect the following instead: foo ------- "baz" "woof" (2 rows) Is this a known issue? Has it been fixed? Thanks, -- -------------------------------------------------------------------- Aaron Bingham Software Engineer Cenix BioScience GmbH --------------------------------------------------------------------
Kevin Murphy <murphy2@speakeasy.net> writes: > On Apr 20, 2005, at 1:24 PM, Aaron Bingham wrote: >> create table a (foo varchar); >> insert into a (foo) values ('baz'); >> create table b (foo varchar); >> insert into b (foo) values ('woof'); >> select '"' || foo || '"' as foo >> from (select foo from a) as bar >> union select foo from b; >> > > No, it's doing what you asked. > > You mean: > > select '"' || foo || '"' from (select foo from a union select foo from > b) as subq; > > Right? Ah, I get it now. Thanks! -- -------------------------------------------------------------------- Aaron Bingham Software Engineer Cenix BioScience GmbH --------------------------------------------------------------------
I see no problem. You get what you want. Correct query is: select '"' || foo || '"' as foo from (select foo from a union select foo from b ) as bar; Oleg On Wed, 20 Apr 2005, Aaron Bingham wrote: > Hello all, > > We noticed some very odd behavior today with Postgres 7.4.5 > > Running the following SQL: > > create table a (foo varchar); > insert into a (foo) values ('baz'); > create table b (foo varchar); > insert into b (foo) values ('woof'); > select '"' || foo || '"' as foo > from (select foo from a) as bar > union select foo from b; > > Produces this output: > > foo > ------- > "baz" > woof > (2 rows) > > I would expect the following instead: > > foo > ------- > "baz" > "woof" > (2 rows) > > Is this a known issue? Has it been fixed? > > Thanks, > > Regards, Oleg _____________________________________________________________ Oleg Bartunov, sci.researcher, hostmaster of AstroNet, Sternberg Astronomical Institute, Moscow University (Russia) Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(095)939-16-83, +007(095)939-23-83
On Wed, Apr 20, 2005 at 07:24:08PM +0200, Aaron Bingham wrote: Hi, > create table a (foo varchar); >x insert into a (foo) values ('baz'); > create table b (foo varchar); > insert into b (foo) values ('woof'); > select '"' || foo || '"' as foo > from (select foo from a) as bar > union select foo from b; It's a precedence issue; not a problem really. Try this: select '"' || foo || '"' as foo from (select foo from a union select foo from b) as bar; -- Alvaro Herrera (<alvherre[@]dcc.uchile.cl>) "¿Que diferencia tiene para los muertos, los huérfanos, y aquellos que han perdido su hogar, si la loca destrucción ha sido realizada bajo el nombre del totalitarismo o del santo nombre de la libertad y la democracia?" (Gandhi)
On Apr 20, 2005, at 1:24 PM, Aaron Bingham wrote: > create table a (foo varchar); > insert into a (foo) values ('baz'); > create table b (foo varchar); > insert into b (foo) values ('woof'); > select '"' || foo || '"' as foo > from (select foo from a) as bar > union select foo from b; > No, it's doing what you asked. You mean: select '"' || foo || '"' from (select foo from a union select foo from b) as subq; Right? -Kevin