Pourquoi cette requête ne fonctionne-t-elle pas?
SELECT 10 AS my_num, my_num*5 AS another_number
FROM table
Dans cet exemple, j'essaie d'utiliser l'alias my_num dans d'autres calculs. Il en résulte une colonne inconnue "my_num"
C’est une version simplifiée de ce que j’essaie de faire, mais j’aimerais utiliser un alias pour effectuer d’autres calculs. Mes calculs sont beaucoup plus compliqués et c'est pourquoi il serait agréable de le nommer puisque je le répète plusieurs fois.
Enveloppez simplement votre alias réutilisé avec (SELECT alias)
:
SELECT 10 AS my_num,
(SELECT my_num) * 5 AS another_number
FROM table
Vous aurez besoin d'utiliser un sous-choix pour utiliser cet alias de cette façon
SELECT my_num*5 AS another_number FROM
(
SELECT 10 AS my_num FROM table
) x
Les alias dans SQL ne sont pas comme des variables dans un langage de programmation. Les alias ne peuvent être référencés à nouveau qu'à certains moments (en particulier dans les clauses GROUP BY
et HAVING
). Mais vous ne pouvez pas réutiliser un alias dans la clause SELECT
. Vous pouvez donc utiliser une requête dérivée (telle que suggérée par Rubens Farias ) qui vous permet de renommer vos colonnes et/ou de nommer les colonnes calculées.
Ou vous pouvez utiliser une VIEW
si vos formules sont généralement fixes
CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;
Je pense que cela sera légèrement plus rapide que d’utiliser une requête dérivée, mais cela dépend probablement beaucoup de votre requête réelle.
Ou vous pouvez simplement dupliquer le travail:
SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;
Ce qui pourrait être pratique dans quelque chose comme php/perl:
my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
`` Une autre option consiste à utiliser l'opérateur APPLY
SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY
(SELECT 5 AS my_num) X