Thread: Subselect with incorrect column not a syntax error?
Could someone please explain to me why the following select does not result in a syntax error? (9.0.3) begin; create table x( c1 integer , c2 integer); create table y( c3 integer, c4 integer); select * from x where c2 in ( select c2 from y where c4 = 2 ); rollback; Mike
On 4/13/2012 11:39 AM, Mike Blackwell wrote: > Could someone please explain to me why the following select does not > result in a syntax error? (9.0.3) > > begin; > > create table x( c1 integer , c2 integer); > create table y( c3 integer, c4 integer); > > select * from x where c2 in ( select c2 from y where c4 = 2 ); > > > rollback; > > Mike > Your subquery is correlated with the outer query. So the c2 in the subquery is referring to table x. -- Jack Christensen jackc@hylesanderson.edu
On Fri, Apr 13, 2012 at 11:59 AM, Jack Christensen <jackc@hylesanderson.edu> wrote: > On 4/13/2012 11:39 AM, Mike Blackwell wrote: >> >> Could someone please explain to me why the following select does not >> result in a syntax error? (9.0.3) >> >> begin; >> >> create table x( c1 integer , c2 integer); >> create table y( c3 integer, c4 integer); >> >> select * from x where c2 in ( select c2 from y where c4 = 2 ); >> >> >> rollback; >> >> Mike >> > Your subquery is correlated with the outer query. So the c2 in the subquery > is referring to table x. This is a good example of why one should always use a table alias prefix when using subqueries.
Indeed. __________________________________________________________________________________ Mike Blackwell | Technical Analyst, Distribution Services/Rollout Management | RR Donnelley 1750 Wallace Ave | St Charles, IL 60174-3401 Office: 630.313.7818 Mike.Blackwell@rrd.com http://www.rrdonnelley.com On Fri, Apr 13, 2012 at 13:34, Scott Marlowe <scott.marlowe@gmail.com> wrote: > On Fri, Apr 13, 2012 at 11:59 AM, Jack Christensen > <jackc@hylesanderson.edu> wrote: >> On 4/13/2012 11:39 AM, Mike Blackwell wrote: >>> >>> Could someone please explain to me why the following select does not >>> result in a syntax error? (9.0.3) >>> >>> begin; >>> >>> create table x( c1 integer , c2 integer); >>> create table y( c3 integer, c4 integer); >>> >>> select * from x where c2 in ( select c2 from y where c4 = 2 ); >>> >>> >>> rollback; >>> >>> Mike >>> >> Your subquery is correlated with the outer query. So the c2 in the subquery >> is referring to table x. > > This is a good example of why one should always use a table alias > prefix when using subqueries. > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general