Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que o uso de alias de coluna no mesmo select não é suportado no Oracle e no Mysql?


Um alias pode ser usado em uma lista de seleção de consulta para dar um nome diferente a uma coluna. Você pode usar o alias em GROUP BY , ORDER BY , ou HAVING cláusulas para se referir à coluna:
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;

O SQL padrão não permite referências a aliases de coluna em um WHERE cláusula. Esta restrição é imposta porque quando o WHERE cláusula for avaliada, o valor da coluna pode ainda não ter sido determinado. Por exemplo, a seguinte consulta é ilegal:
SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

O WHERE cláusula determina quais linhas devem ser incluídas no GROUP BY cláusula, mas se refere ao alias de um valor de coluna que não é conhecido até que as linhas tenham sido selecionadas e agrupadas pelo GROUP BY .

Na lista de seleção de uma consulta, um alias de coluna entre aspas pode ser especificado usando caracteres identificadores ou de aspas de string:
SELECT 1 AS `one`, 2 AS 'two';

Em outras partes da instrução, as referências citadas ao alias devem usar aspas de identificador ou a referência é tratada como um literal de string. Por exemplo, esta instrução agrupa pelos valores no id da coluna, referenciados usando o alias a :
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

Mas esta instrução agrupa pela string literal 'a' e não funcionará conforme o esperado:
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';

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