Re: [SQL] table aliasing problem with 6.5...

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Howie <caffeine(at)toodarkpark(dot)org>, pgsql-sql(at)hub(dot)org
Subject: Re: [SQL] table aliasing problem with 6.5...
Date: 1999-09-27 17:44:19
Message-ID: 199909271744.NAA09308@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

> Howie <caffeine(at)toodarkpark(dot)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/liszt
C |f |f | 0|/bin/cc
sql |f |f | 0|postgres
(4 rows)

test=> select pg_language.*;
--> NOTICE: Auto-creating query reference to table pg_language
lanname |lanispl|lanpltrusted|lanplcallfoid|lancompiler
--------+-------+------------+-------------+--------------
internal|f |f | 0|n/a
lisp |f |f | 0|/usr/ucb/liszt
C |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(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Bruce Momjian 1999-09-27 18:55:13 Re: [SQL] UNIQUE constraint
Previous Message Thomas Lockhart 1999-09-27 15:31:36 Re: [SQL] IFNULL - problem