Re: SQL query syntax question - Mailing list pgsql-sql

From David G. Johnston
Subject Re: SQL query syntax question
Date
Msg-id CAKFQuwZQpA8pq57uS5Be4JOYy8BGVnToSDXLdHB+NP+-cAoTxw@mail.gmail.com
Whole thread Raw
In response to SQL query syntax question  (Alexander Levsha <levsha.alexander@gmail.com>)
Responses Re: SQL query syntax question  (Alexander Levsha <levsha.alexander@gmail.com>)
List pgsql-sql
On Monday, April 4, 2016, Alexander Levsha <levsha.alexander@gmail.com> wrote:
Hello all.
I'm currently developing an SQL parser/analyzer for internal PostgreSQL tool we use at my workplace.
Naturally, i use psql in conjunction with PostgreSQL documentation to develop and verify my work.

Recently i've noticed the following oddity in query syntax/execution:

select (select c1 from tt) from t1 tt;
--ERROR:  relation "tt" does not exist
--LINE 1: select (select c1 from tt) from t1 tt;

select (select tt.c1 ) from t1 tt;
--c1 
------
--(0 rows)

Why doesn't the first one work when the second one works fine? In other words, why do subquery's traget list and range table list use different namespaces to resolve table references/aliases? Is this an unintended behaviour, implementation detail or is there an actual reason for this?
Cannot speak to restrictions imposed by the SQL standard but the exhibited behavior seems logical given the nature of subqueries.

The relation named in the FROM clause must exist in the database schema or have been previously "created" using a CTE.  Within a subquery all from clause entries behave the same but you can reference a column by name (with usually optional table and schema prefix) if it exists in the containing scope.  Thus there is no need to complicate things by requiring (or allowing) the outer relation names to be targeted by a FROM clause in a subquery.

Correlated subqueries require target list resolution to behave in that manner.  It doesn't seem useful to complicate range table resolution lacking a similar need.

What is the motivation for the inquiry?

David J.

pgsql-sql by date:

Previous
From: Alexander Levsha
Date:
Subject: SQL query syntax question
Next
From: Alexander Levsha
Date:
Subject: Re: SQL query syntax question