sql >> Databáze >  >> RDS >> Mysql

Proč použití aliasu sloupce ve stejném výběru není podporováno v Oracle a Mysql?

Alias ​​lze použít v seznamu pro výběr dotazu a dát sloupci jiný název. Alias ​​můžete použít v GROUP BY , ORDER BY nebo HAVING klauzule odkazující na sloupec:

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;

Standardní SQL nepovoluje odkazy na aliasy sloupců v WHERE doložka. Toto omezení je zavedeno, protože když WHERE klauzule vyhodnocena, hodnota sloupce možná ještě nebyla určena. Například následující dotaz je nezákonný:

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

WHERE klauzule určuje, které řádky by měly být zahrnuty do GROUP BY klauzule, ale odkazuje na alias hodnoty sloupce, který není znám, dokud nejsou vybrány řádky a seskupeny podle GROUP BY .

Ve výběrovém seznamu dotazu lze alias sloupce v uvozovkách zadat pomocí identifikátoru nebo řetězců:

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

Jinde v příkazu musí citované odkazy na alias používat citování identifikátoru, jinak je odkaz považován za řetězcový literál. Například tento příkaz seskupuje podle hodnot ve sloupci id, na které se odkazuje pomocí aliasu a :

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

Tento příkaz se však seskupuje podle doslovného řetězce 'a' a nebude fungovat podle očekávání:

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

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



  1. Před a po spuštění u stejné události? Vyplňte podřízenou tabulku PostgreSQL

  2. SEC_TO_TIME() Příklady – MySQL

  3. Uložte data v arabštině do databáze MySQL

  4. GROUP BY (MySQL vs SQL server)