Re: BUG #14188: "FOR SELECT DISTINCT, ORDER BY expressions must appear IN SELECT list" error and table alias

Поиск
Список
Период
Сортировка
От Gabriele Monfardini
Тема Re: BUG #14188: "FOR SELECT DISTINCT, ORDER BY expressions must appear IN SELECT list" error and table alias
Дата
Msg-id CACw3ADjcJiJDg1G8MYNdHFJLXoefEQt3rC9k+HWODzL=jrQQnA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #14188: "FOR SELECT DISTINCT, ORDER BY expressions must appear IN SELECT list" error and table alias  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
On Tue, Jun 14, 2016 at 5:00 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

> gabrimonfa@gmail.com writes:
> > CREATE TABLE table1 (id integer primary key, name varchar);
> > CREATE TABLE table2 (id integer primary key, home varchar);
>
> > SELECT DISTINCT name FROM table1 t1 INNER JOIN table2 t2 ON (t1.id =
> t2.id)
> > ORDER BY t1.name;
> > ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select
> list
> > SELECT DISTINCT name FROM table1 t1 INNER JOIN table2 t2 ON (t1.id =
> t2.id)
> > ORDER BY name;
> > [ok]
>
> The reason for the discrepancy is that "t1.name" refers to an output
> column of t1, while "name" refers to an output column of the unnamed JOIN.
> While those are semantically equivalent in this particular case, they are
> not so in general --- in particular, had this been a FULL JOIN, they
> would definitely not be equivalent.  PG's parser treats them as different
> variables and therefore sees "ORDER BY t1.name" as unrelated to the value
> being distinct'ed on.
>
> We might someday try to make the parser smarter about recognizing such
> equivalences earlier, but I'm not terribly excited about it.
>

yes, it would probably not worth the effort.
Thank you for the explanation.
Best regards,

Gabriele Monfardini

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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: BUG #13907: Restore materialized view throw permission denied
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: pg_dump - wrong order with inheritance