Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum wird die Verwendung von Spaltenaliasnamen in derselben Auswahl in Oracle und Mysql nicht unterstützt?

Ein Alias ​​kann in einer Abfrageauswahlliste verwendet werden, um einer Spalte einen anderen Namen zu geben. Sie können den Alias ​​in GROUP BY verwenden , ORDER BY , oder HAVING Klauseln, um auf die Spalte zu verweisen:

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;

Standard-SQL verbietet Verweise auf Spaltenaliase in einem WHERE Klausel. Diese Einschränkung wird auferlegt, weil wenn der WHERE -Klausel ausgewertet wird, wurde der Spaltenwert möglicherweise noch nicht bestimmt. Die folgende Abfrage ist beispielsweise illegal:

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

Das WHERE -Klausel bestimmt, welche Zeilen in GROUP BY eingeschlossen werden sollen -Klausel, bezieht sich aber auf den Alias ​​eines Spaltenwerts, der erst bekannt ist, nachdem die Zeilen ausgewählt und durch GROUP BY gruppiert wurden .

In der Auswahlliste einer Abfrage kann ein Spaltenalias in Anführungszeichen mithilfe von Bezeichnern oder Zeichenketten in Anführungszeichen angegeben werden:

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

An anderer Stelle in der Anweisung müssen in Anführungszeichen gesetzte Referenzen auf den Alias ​​Bezeichner in Anführungszeichen setzen oder die Referenz wird als Zeichenfolgenliteral behandelt. Diese Anweisung gruppiert beispielsweise nach den Werten in Spalte id, auf die mit dem Alias ​​a verwiesen wird :

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

Aber diese Anweisung gruppiert nach der Literalzeichenfolge 'a' und funktioniert nicht wie erwartet:

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

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