2010-01-16 4 views
42

Почему этот запрос не работает?Использование псевдонима в вычислениях SQL

SELECT 10 AS my_num, my_num*5 AS another_number 
FROM table 

В этом примере я пытаюсь использовать псевдоним my_num в других вычислениях. Это приводит к неизвестному столбцу «my_num»

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

+0

Вы действительно должны оформить ответ zessx - он делает именно то, что вам нужно без подзапроса, что текущий принятый ответ. –

ответ

102

Просто оберните повторно использовать псевдоним с (SELECT alias):

SELECT 10 AS my_num, 
     (SELECT my_num) * 5 AS another_number 
FROM table 
+9

Это УДИВИТЕЛЬНО и должно быть принятым ответом. Спасибо. –

+11

Мне интересно, где эта функциональность документирована. Я искал всю документацию MySQL, и я ее не нашел. Я не знаю, как это «повторное использование псевдонимов» работает, и мне интересно узнать о переносимости или производительности. Если кто-то знает об этом, я по достоинству оценят ссылку. Спасибо вам. –

+0

это только что сделал мою неделю .. может быть месяц. супер полезный, особенно с псевдонимами, созданными из операторов управления потоком, таких как 'IF()', 'CASE()' и т. д. – billynoah

10

Вы должны будете использовать подзапрос, чтобы использовать это псевдонимы, что путь

SELECT my_num*5 AS another_number FROM 
(
    SELECT 10 AS my_num FROM table 
) x 
+0

Что такое «х»? – mysmallidea

+0

@RyanHeneise, это псевдоним подзапроса; таким образом, вы можете пойти с 'x.my_num' –

4

Псевдонимы в 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"; 
0

`` Другой вариант - использовать операцию APPLY тор

SELECT my_num, my_num*5 AS another_number 
FROM table 
CROSS APPLY 
(SELECT 5 AS my_num) X 
+0

Обратите внимание, что 'CROSS APPLY', похоже, недоступен в MySQL * (пока) *. – Pang

Смежные вопросы