Re: BUG #13336: Unexpected result from invalid query

From: Christian Ullrich <chris(at)chrullrich(dot)net>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #13336: Unexpected result from invalid query
Date: 2015-05-23 00:31:10
Message-ID: AM2PR06MB0690F494EDEBCDF868475B66D4CF0@AM2PR06MB0690.eurprd06.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

* From: Andres Freund [mailto:andres(at)anarazel(dot)de]

> On 2015-05-23 00:05:27 +0000, chris(at)chrullrich(dot)net wrote:
> > -- Note: No column "foo" in test_table2
> > postgres=# select * from test_table where foo in (select foo from
> > test_table2);
> > foo | bar
> > -----+-----
> > one | 1
> > two | 2
>
> That's not a bug. In a good number of subqueries you need access fields
> from the surrounding query.

Hm. That makes some sense, I guess. But is that true even if the reference in the subquery is not explicitly qualified? "SELECT foo FROM test_table2" looks to me like it refers to that table pretty unequivocally.

On the other hand I can find one sentence in the documentation on the subject, and it appears to support the conclusion that this is not a bug:

http://www.postgresql.org/docs/9.4/static/queries-table-expressions.html:

Example: SELECT ... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10)

Qualifying c1 as fdt.c1 is only necessary if c1 is also the name of a
column in the derived input table of the subquery.

That can be read as confirming that resolving the unqualified name against the outer query is intended.

Still seems weird to me. But if that' the way it is, I'm sorry for the noise.

--
Christian

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2015-05-23 01:14:49 Re: BUG #13336: Unexpected result from invalid query
Previous Message Andres Freund 2015-05-23 00:12:27 Re: BUG #13336: Unexpected result from invalid query