Как правило, есть две вещи, которые вам нужно знать о предложении SELECT
:
- Хотя оно написано first , оно оценивается last, за исключением пункта
ORDER BY
.Вот почему вы не можете использовать любые вычисляемые поля или псевдонимы в любом другом предложении (в частности, в предложении WHERE
) , за исключением в предложении ORDER BY
. - Вычисления в предложении
SELECT
выполняются в параллельно или, по крайней мере, обрабатываются так, как если бы они были.Вот почему вы не можете использовать один расчет как часть другого.
Итак, краткий ответ: вы не можете, и это по замыслу.
Заметное исключение дляэто Microsoft Access, где вы действительно можете использовать вычисления в последующих столбцах и предложениях WHERE
.Однако, хотя это удобно, на самом деле это не является преимуществом: невыполнение вышеуказанных принципов менее эффективно.Но это нормально для баз данных с малой нагрузкой, для которых предполагается использовать Access.
Если вы действительно хотите повторно использовать вычисленные результаты, вам понадобится отдельный запрос, либо в форме подпункта.запрос или в качестве общего выражения таблицы.С CTE работать намного проще, так как их легче читать.
Редактировать
Не изменив точку исходного ответа, я подумал, что могу добавить, чтодумаю, что это объяснение, возможно, немного подло.
Современные СУБД прикладывают большие усилия к планированию и оптимизации запросов, поэтому более не правильно, если вообще когда-либо, что запрос действительно выполняется в определенном порядке.,Насколько я вижу, нет технической причины, по которой оптимизатор не мог смотреть в будущее и включать вычисленные результаты в синтаксический анализ запроса, даже если он предназначен только для замены выражений.
Ну да ладно ...