Ответ 1
Просто добавьте повторно использованный псевдоним (SELECT alias)
:
SELECT 10 AS my_num,
(SELECT my_num) * 5 AS another_number
FROM table
Почему этот запрос не работает?
SELECT 10 AS my_num, my_num*5 AS another_number
FROM table
В этом примере я пытаюсь использовать псевдоним my_num в других вычислениях. Это приводит к неизвестному столбцу "my_num"
Это упрощенная версия того, что я пытаюсь сделать, но в основном я хотел бы использовать псевдоним для других вычислений. Мои вычисления намного сложнее, и поэтому было бы неплохо, если бы он повторил это несколько раз по-разному.
Просто добавьте повторно использованный псевдоним (SELECT alias)
:
SELECT 10 AS my_num,
(SELECT my_num) * 5 AS another_number
FROM table
Вам нужно будет использовать подзаголовок, чтобы использовать эти псевдонимы таким образом
SELECT my_num*5 AS another_number FROM
(
SELECT 10 AS my_num FROM table
) x
Псевдонимы в sql не являются переменными на языке программирования. Псевдонимы могут быть указаны только в определенных точках (особенно в предложениях GROUP BY
и HAVING
). Но вы не можете повторно использовать псевдоним в предложении SELECT
. Таким образом, вы можете использовать производный запрос (например, предложенный Rubens Farias), который позволяет вам в основном переименовывать ваши столбцы и/или указывать любые вычисленные столбцы.
Или вы можете использовать VIEW
, если ваши формулы обычно фиксированы.
CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;
Я считаю, что это будет немного быстрее, чем использование производного запроса, но, вероятно, это сильно зависит от вашего реального запроса.
Или вы можете просто дублировать работу:
SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;
Что может быть удобно в чем-то вроде php/perl:
my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
`` Другой вариант - использовать оператор APPLY
SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY
(SELECT 5 AS my_num) X