Hi,

Shouldn't the final command below cause a 'column "b" does not exist error'?

create table update_test (a int, b int);
create table supdate_test(x int, y int);
insert into update_test values (20, 30);
insert into supdate_test values (40, 50);
select a, (select b from supdate_test) from update_test;

a ?column?
---------- -------------------------
20 30

Is the problem with the code in colNameToVar or maybe we should add checks
in transformSubLink?

Regards,
Nikhils

Search Discussions

  • Merlin Moncure at Apr 12, 2007 at 12:48 pm

    On 4/12/07, NikhilS wrote:
    Hi,

    Shouldn't the final command below cause a 'column "b" does not exist error'?

    create table update_test (a int, b int);
    create table supdate_test(x int, y int);
    insert into update_test values (20, 30);
    insert into supdate_test values (40, 50);
    select a, (select b from supdate_test) from update_test;

    a ?column?
    ---------- -------------------------
    20 30

    Is the problem with the code in colNameToVar or maybe we should add checks
    in transformSubLink?
    I don't think so...the columns of update_test are visible to the
    scalar subquery...that way you can use fields from 'a' to filter the
    subquery...
    select a, (select y from supdate_test where x = a) from update_test;

    merlin
  • NikhilS at Apr 12, 2007 at 12:56 pm
    Hi,
    On 4/12/07, Merlin Moncure wrote:
    On 4/12/07, NikhilS wrote:
    Hi,

    Shouldn't the final command below cause a 'column "b" does not exist error'?
    create table update_test (a int, b int);
    create table supdate_test(x int, y int);
    insert into update_test values (20, 30);
    insert into supdate_test values (40, 50);
    select a, (select b from supdate_test) from update_test;

    a ?column?
    ---------- -------------------------
    20 30

    Is the problem with the code in colNameToVar or maybe we should add checks
    in transformSubLink?
    I don't think so...the columns of update_test are visible to the
    scalar subquery...that way you can use fields from 'a' to filter the
    subquery...
    select a, (select y from supdate_test where x = a) from update_test;

    Yes this is fine, but in "select columnname from tablename" using column
    references of the other involved table is what I am objecting to.

    Regards,
    Nikhils
  • Bort, Paul at Apr 12, 2007 at 1:30 pm

    I don't think so...the columns of update_test are visible to the
    scalar subquery...that way you can use fields from 'a'
    to filter the
    subquery...
    select a, (select y from supdate_test where x = a) from
    update_test;


    Yes this is fine, but in "select columnname from tablename"
    using column references of the other involved table is what I
    am objecting to.
    There's nothing here to object to, the system is acting correctly. Your
    column name "b" is ambiguous, and the system takes the column "b" that
    exists, rather than returning an error on a column that doesn't exist.
    If you were explicit in your column name, you would get an error:

    =# select a, (select supdate_test.b from supdate_test) from update_test;
    ERROR: No such attribute supdate_test.b

    Regards,
    Paul
  • Tom Lane at Apr 12, 2007 at 1:45 pm

    NikhilS writes:
    Yes this is fine, but in "select columnname from tablename" using column
    references of the other involved table is what I am objecting to.
    You can object till you're blue in the face, but this behavior is not
    changing because it's *required by spec*. Outer references are a
    standard and indeed essential part of SQL.

    regards, tom lane

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedApr 12, '07 at 12:38p
activeApr 12, '07 at 1:45p
posts5
users4
websitepostgresql.org...
irc#postgresql

People

Translate

site design / logo © 2021 Grokbase