Почему «имя выходного столбца должно стоять отдельно, то есть его нельзя использовать в выражении» в ORDER BY? - PullRequest
0 голосов
/ 25 июня 2018

В документе PostgreSQL

Предложение ORDER BY определяет порядок сортировки:

SELECT select_list
    FROM table_expression
    ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
             [, sort_expression2 [ASC | DESC] [NULLS { FIRST |
 LAST }] ...]

Выражение (я) сортировки может быть любым выражением, которое будет допустимым всписок выбора запроса.Например:

SELECT a, b FROM table1 ORDER BY a + b, c;

...

Выражение сортировки также может быть меткой столбца или номером выходного столбца, как в:

SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;

обаиз которых сортировать по первому выходному столбцу.Обратите внимание, что имя выходного столбца должно стоять отдельно, то есть его нельзя использовать в выражении - например, это неверно:

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- wrong

Это ограничение сделано дляуменьшить двусмысленность.Существует двусмысленность, если элемент ORDER BY - это простое имя, которое может совпадать либо с именем выходного столбца, либо с столбцом из выражения таблицы.Выходной столбец используется в таких случаях.Это может привести к путанице только в том случае, если вы используете AS для переименования выходного столбца в соответствии с именем какого-либо другого столбца таблицы.

Может кто-нибудь объяснить, что «имя выходного столбца должно стоять отдельно, то есть не можетбыть использованы в выражении "означает?

Почему ORDER BY a+b в первом примере правильно, а ORDER BY sum+c в последнем примере неверно?

Какую неоднозначность может обеспечить последний пример?

Спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

Существует двусмысленность, если table1 имеет столбец с именем sum.Без правила парсер должен был бы учитывать для каждого имени, является ли оно именем столбца или псевдонимом выражения.С правилом, это должно только учитывать, что, если имя стоит отдельно.Таким образом, правило уменьшает двусмысленность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...