Ответ 1
Рассмотрим использование подзапроса, например:
SELECT col1
, col1 + field3 AS col3
FROM (
SELECT field1 + field2 as col1
, field3
from core
) as SubQueryAlias
Я пытаюсь сделать что-то подобное. Но я получаю неизвестную ошибку столбца:
SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
В принципе, я хочу просто использовать псевдоним, чтобы мне не нужно было выполнять ранее выполненные операции. Возможно ли это в mysql?
Рассмотрим использование подзапроса, например:
SELECT col1
, col1 + field3 AS col3
FROM (
SELECT field1 + field2 as col1
, field3
from core
) as SubQueryAlias
select @code:= SUM(field1 + field2), @code+1 from abc;
Но, пожалуйста, помните следующее (из MySQL 5.6 docs):
Как правило, кроме инструкций SET, вы никогда не должны присваивать значение переменной пользователя и читать значение в пределах одного и того же оператора. Например, чтобы увеличить переменную, это нормально:
SET @a = @a + 1;
Для других операторов, таких как SELECT, вы можете получить ожидаемые результаты, но это не гарантируется. В следующем утверждении вы можете подумать, что MySQL сначала оценит @a, а затем выполнит второе занятие:
SELECT @a, @a:[email protected]+1, ...;
Однако порядок оценки выражений с использованием пользовательских переменных undefined.
Итак, используйте на свой страх и риск.
Вы можете select
псевдоним:
SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core
Это работает.
В соответствии с спецификация Ответ Рави Пареха не гарантируется всегда, так как "порядок оценки выражений с использованием пользовательских переменных undefined".
Я нашел этот ответ после того, как попытался использовать переменную и получил странные результаты.
select @code:= SUM(field1 + field2), (@code*1) from abc;
@code * 1 скрытый в числовое выражение, и вы можете использовать в любом месте, например
select @code:= SUM(field1 + field2), (@code*1)+field3 from abc;
Короткий ответ:
mysql> select 1 as a, a + 1 as b;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
postgresql# select 1 as a, a + 1 as b;
ERROR: column "a" does not exist
Тем не менее, некоторые реализации SQL позволяют использовать псевдонимы в том, где /group имеют/имеющие предложения, например:
postgresql# select 1 as a group by a; -- 1 row
В случае, если вы используете его с агрегатной функцией (group by), и если он не работает для вас, поместите вычисляемый столбец в конец с помощью прямой ссылки на столбец.
SELECT FNC2(AF), FNC1(A) AS AF, B, C, FROM Table GROUP BY ...
1st one doesn't work due to forward column referencing. Do this instead
SELECT FNC1(A) AS AF, B, C, FNC2((SELECT AF)) FROM Table GROUP BY ...