From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Howie <caffeine(at)toodarkpark(dot)org> |
Cc: | pgsql-sql(at)hub(dot)org |
Subject: | Re: [SQL] table aliasing problem with 6.5... |
Date: | 1999-08-07 14:04:53 |
Message-ID: | 11578.934034693@sss.pgh.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...
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 1999-08-07 15:15:35 | Re: [SQL] table aliasing problem with 6.5... |
Previous Message | Howie | 1999-08-07 13:06:57 | table aliasing problem with 6.5... |