Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi l'utilisation d'alias de colonne dans la même sélection n'est-elle pas prise en charge dans Oracle et Mysql ?

Un alias peut être utilisé dans une liste de sélection de requête pour donner un nom différent à une colonne. Vous pouvez utiliser l'alias dans GROUP BY , ORDER BY , ou HAVING clauses pour faire référence à la colonne :

SELECT SQRT(a*b) AS root FROM tbl_name
  GROUP BY root HAVING root > 0;

SELECT id, COUNT(*) AS cnt FROM tbl_name
  GROUP BY id HAVING cnt > 0;

SELECT id AS 'Customer identity' FROM tbl_name;

Le SQL standard interdit les références aux alias de colonne dans un WHERE clause. Cette restriction est imposée car lorsque le WHERE clause est évaluée, la valeur de la colonne n'a peut-être pas encore été déterminée. Par exemple, la requête suivante est illégale :

SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

Le WHERE la clause détermine quelles lignes doivent être incluses dans le GROUP BY clause, mais elle fait référence à l'alias d'une valeur de colonne qui n'est connue qu'après que les lignes ont été sélectionnées et regroupées par le GROUP BY .

Dans la liste de sélection d'une requête, un alias de colonne entre guillemets peut être spécifié à l'aide d'un identifiant ou d'une chaîne entre guillemets :

SELECT 1 AS `one`, 2 AS 'two';

Ailleurs dans l'instruction, les références entre guillemets à l'alias doivent utiliser des guillemets d'identificateur ou la référence est traitée comme un littéral de chaîne. Par exemple, cette instruction regroupe les valeurs de la colonne id, référencées à l'aide de l'alias a :

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

Mais cette instruction regroupe par la chaîne littérale 'a' et ne fonctionnera pas comme prévu :

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';

Source :https://docs.oracle .com/cd/E17952_01/refman-5.0-en/problems-with-alias.html