web-dev-qa-db-fra.com

Comment aliaser un champ ou une colonne dans MySQL?

J'essaie de faire quelque chose comme ça. Mais je reçois une erreur de colonne inconnue:

SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core

En gros, je veux simplement utiliser le pseudonyme afin de ne pas avoir à exécuter les opérations effectuées précédemment. Est-ce possible dans mysql?

26
user225269

Pensez à utiliser une sous-requête, telle que:

SELECT col1
,      col1 + field3 AS col3 
FROM   (
       SELECT  field1 + field2 as col1
       ,       field3
       from    core
       ) as SubQueryAlias
19
Andomar

Vous pouvez select l'alias:

SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core

Cela marche.

12
Moises

Selon les spécifications La réponse de Ravi Parekh ne fonctionne pas toujours, car "l'ordre d'évaluation des expressions impliquant des variables utilisateur n'est pas défini".

J'ai trouvé cette réponse après avoir essayé d'utiliser une variable et obtenu des résultats étranges.

4
mmavcy
select @code:= SUM(field1 + field2), (@code*1) from abc;

@ code * 1 convertir en expression numérique et vous pouvez utiliser n'importe où, comme 

select @code:= SUM(field1 + field2), (@code*1)+field3 from abc;
3
Kamran Aslam

La réponse courte est non:

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

Cela dit, certaines implémentations SQL permettent d’utiliser les alias dans les clauses where/group by/having, par exemple:

postgresql# select 1 as a group by a; -- 1 row
2

Si vous l'utilisez avec la fonction d'agrégat (group by) et si cela ne fonctionne pas, placez la colonne calculée à la fin avec un renvoi de colonne en aval.

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 ...

0
www.shipshuk.com