Re: [SQL] table aliasing problem with 6.5... - Mailing list pgsql-sql

From Bruce Momjian
Subject Re: [SQL] table aliasing problem with 6.5...
Date
Msg-id 199909271744.NAA09308@candle.pha.pa.us
Whole thread Raw
In response to Re: [SQL] table aliasing problem with 6.5...  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [SQL] table aliasing problem with 6.5...  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
> Howie <caffeine@toodarkpark.org> writes:
> > (1) why is it trying to do a cartesian join when not using the aliased
> >     tables?
> 
> That's what it's supposed to do.  When you provide an alias for a table
> name in FROM, then as far as the rest of that query is concerned, that
> alias *is* the name of the table --- it has no other.  When you refer
> to the original table name in the WHERE clause, that's taken as creating
> a separate table reference that's implicitly added to FROM.  Your query
> is a four-way join with only one join having a restriction clause :-(
> 
> The alias behavior is necessary in order to handle self-joins properly,
> for example to find married couples:
>     SELECT * FROM person, person other WHERE person.spouse = other.spouse;
> This would be ambiguous if "person" were exposed by the second FROM clause.
> SQL92 requires it to work this way:
> 
>          <table reference> ::=
>                 <table name> [ [ AS ] <correlation name>
>                     [ <left paren> <derived column list> <right paren> ] ]
> 
>     ...
> 
>          1) A <correlation name> immediately contained in a <table refer-
>             ence> TR is exposed by TR. A <table name> immediately contained
>             in a <table reference> TR is exposed by TR if and only if TR
>             does not specify a <correlation name>.
> 
> 
> I think that implicitly adding a table to FROM is a Postgres extension
> not found in SQL92 --- we probably really ought to reject such a query
> with an error, since this behavior seems to be surprising...

OK, I have added an elog(NOTICE) for this behavior:test=> select * from pg_language;lanname
|lanispl|lanpltrusted|lanplcallfoid|lancompiler  --------+-------+------------+-------------+--------------internal|f
  |f           |            0|n/a           lisp    |f      |f           |            0|/usr/ucb/lisztC       |f
|f          |            0|/bin/cc       sql     |f      |f           |            0|postgres      (4 rows)test=>
selectpg_language.*;     
 
-->    NOTICE:  Auto-creating query reference to table pg_languagelanname
|lanispl|lanpltrusted|lanplcallfoid|lancompiler  --------+-------+------------+-------------+--------------internal|f
  |f           |            0|n/a           lisp    |f      |f           |            0|/usr/ucb/lisztC       |f
|f          |            0|/bin/cc       sql     |f      |f           |            0|postgres      (4 rows)
 


I am interested in comments about my wording, and this behavour.

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-sql by date:

Previous
From: Thomas Lockhart
Date:
Subject: Re: [SQL] IFNULL - problem
Next
From: Bruce Momjian
Date:
Subject: Re: [SQL] UNIQUE constraint