sql >> Databasteknik >  >> RDS >> Mysql

Varför stöds inte användning av kolumnalias i same select i Oracle och Mysql?

Ett alias kan användas i en frågevallista för att ge en kolumn ett annat namn. Du kan använda aliaset i GROUP BY , ORDER BY , eller HAVING satser för att hänvisa till kolumnen:

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 tillåter inte referenser till kolumnalias i en WHERE klausul. Denna begränsning införs eftersom när WHERE klausulen utvärderas, kanske kolumnvärdet ännu inte har fastställts. Till exempel är följande fråga olaglig:

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

WHERE satsen bestämmer vilka rader som ska inkluderas i GROUP BY sats, men det hänvisar till aliaset för ett kolumnvärde som inte är känt förrän efter att raderna har valts och grupperat efter GROUP BY .

I urvalslistan för en fråga kan ett kolumnalias med citattecken anges med hjälp av identifierare eller sträng med citationstecken:

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

På andra ställen i uttalandet måste citerade referenser till aliaset använda identifierarcitation eller så behandlas referensen som en bokstavlig sträng. Till exempel grupperar den här satsen efter värdena i kolumn-id, refererade till med aliaset a :

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

Men detta påstående grupperar efter den bokstavliga strängen 'a' och kommer inte att fungera som förväntat:

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

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



  1. Postgres textkolumn som endast tillåter/konverterar till gemener och inga specialtecken som:Ñöáè

  2. Beräkna antalet sekunder sedan ett visst datum/tid i SQLite

  3. Hur man ansluter MySQL till Java-program

  4. Hur får man fram alla kolumnernamn för alla tabeller i MySQL?