On Thu, May 26, 2016 at 12:02 PM, Alex Ignatov <a.igna...@postgrespro.ru>
wrote:

> Hello!
>
> Why the following query:
>
> SELECT (select msc_id
>               from collectors
>               where id = substring(fileid from -1)
>        ) msc_id
>        from ip_data_records
>        group by substring(fileid from -1)
>
> gives me:
>
> ERROR:  subquery uses ungrouped column "ip_data_records.fileid" from outer
> query
> LINE 3:         where id = substring(fileid from -1)
>
> but  the following query:
>
> SELECT (select msc_id
>               from collectors
>               where id = fileid
>        ) msc_id
>        from ip_data_records
>        group by fileid
> is working ok
>

>From observation ​PostgreSQL​

​doesn't recognize the equivalency of the outer "group by substring(fileid
from -1)" and the subquery expression.  What PostgreSQL does is push the
column ip_data_records.fieldid​ into the subquery where it just happens to
be used in the expression "substring(fileid from -1)".  For all PostgreSQL
cares the subquery could have the expression "where id = lower(fileid)" and
the execution mechanics, and error, would be identical.

IOW, columns are the unit of interchange between a parent query and its
correlated subqueries.​

David J.

Reply via email to