Mysql
 sql >> Database >  >> RDS >> Mysql

Perché l'uso dell'alias di colonna nella stessa selezione non è supportato in Oracle e Mysql?

È possibile utilizzare un alias in un elenco di selezione di query per assegnare a una colonna un nome diverso. Puoi usare l'alias in GROUP BY , ORDER BY , o HAVING clausole a cui fare riferimento nella colonna:

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;

L'SQL standard non consente i riferimenti agli alias di colonna in un WHERE clausola. Questa restrizione è imposta perché quando il WHERE viene valutata, il valore della colonna potrebbe non essere stato ancora determinato. Ad esempio, la seguente query è illegale:

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

Il WHERE La clausola determina quali righe devono essere incluse in GROUP BY clausola, ma si riferisce all'alias di un valore di colonna che non è noto fino a quando le righe non sono state selezionate e raggruppate per GROUP BY .

Nell'elenco di selezione di una query, è possibile specificare un alias di colonna tra virgolette utilizzando identificatori o caratteri di virgolette di stringa:

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

Altrove nell'istruzione, i riferimenti all'alias tra virgolette devono utilizzare la virgoletta dell'identificatore o il riferimento viene trattato come una stringa letterale. Ad esempio, questa istruzione raggruppa in base ai valori nella colonna id, a cui si fa riferimento utilizzando l'alias a :

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

Ma questa istruzione raggruppa in base alla stringa letterale 'a' e non funzionerà come previsto:

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/problemi-con-alias.html