sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué Oracle y Mysql no admiten el uso de alias de columna en la misma selección?

Se puede usar un alias en una lista de selección de consulta para dar a una columna un nombre diferente. Puedes usar el alias en GROUP BY , ORDER BY , o HAVING cláusulas para referirse a la columna:

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;

SQL estándar no permite referencias a alias de columna en un WHERE cláusula. Esta restricción se impone porque cuando el WHERE se evalúa la cláusula, es posible que aún no se haya determinado el valor de la columna. Por ejemplo, la siguiente consulta es ilegal:

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

El WHERE determina qué filas deben incluirse en el GROUP BY cláusula, pero se refiere al alias de un valor de columna que no se conoce hasta después de que las filas hayan sido seleccionadas y agrupadas por GROUP BY .

En la lista de selección de una consulta, se puede especificar un alias de columna entre comillas mediante caracteres de comillas de identificador o cadena:

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

En otras partes de la declaración, las referencias entre comillas al alias deben usar comillas de identificador o la referencia se trata como una cadena literal. Por ejemplo, esta declaración agrupa por los valores en la columna id, a la que se hace referencia con el alias a :

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

Pero esta declaración se agrupa por la cadena literal 'a' y no funcionará como se esperaba:

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

Fuente:https://docs.oracle .com/cd/E17952_01/refman-5.0-en/problemas-con-alias.html