Re: problem with subselect

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: problem with subselect
Дата
Msg-id 1593.1047061907@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: problem with subselect  (Josh Berkus <josh@agliodbs.com>)
Список pgsql-sql
Josh Berkus <josh@agliodbs.com> writes:
>> "Sub-SELECT uses un-GROUPed attribute f.date_creation from outer query"
>> Which is not really true, but some way is...

> Hmmm ... this looks like a minor parser bug.

No, it's operating as designed.  Note the comments in CVS tip
parse_agg.c:
* NOTE: we recognize grouping expressions in the main query, but only* grouping Vars in subqueries.  For example, this
willbe rejected,* although it could be allowed:*        SELECT*            (SELECT x FROM bar where y = (foo.a +
foo.b))*       FROM foo*        GROUP BY a + b;* The difficulty is the need to account for different sublevels_up.*
Thisappears to require a whole custom version of equal(), which is* way more pain than the feature seems worth.
 

Previous versions implemented the check for ungrouped vars a little
differently, but the net effect was the same.  (Given that SQL99 allows
only a simple column reference as a GROUP BY element, this isn't a spec
violation, merely a limitation on how far we are willing to extend the
spec.)

There are a number of straightforward ways to rewrite the query to avoid
this, but I can't help wondering whether the basic approach isn't wrong.
The subselect seems an ugly and inefficient way to do it, because it's
re-executing the entire join for each group ... but I can't quite put
my finger on a better way ...
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Cancelling Queries
Следующее
От: Chris Gamache
Дата:
Сообщение: Splitting text into rows with SQL