Re: [SQL] table aliasing problem with 6.5...
От | Tom Lane |
---|---|
Тема | Re: [SQL] table aliasing problem with 6.5... |
Дата | |
Msg-id | 11578.934034693@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | table aliasing problem with 6.5... (Howie <caffeine@toodarkpark.org>) |
Ответы |
Re: [SQL] table aliasing problem with 6.5...
Re: [SQL] table aliasing problem with 6.5... |
Список | 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> <derivedcolumn 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 specifya <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
В списке pgsql-sql по дате отправления: