sql >> Database >  >> RDS >> Mysql

Waarom wordt het gebruik van kolomalias in dezelfde selectie niet ondersteund in Oracle en Mysql?

Een alias kan worden gebruikt in een selectielijst voor query's om een ​​kolom een ​​andere naam te geven. U kunt de alias gebruiken in GROUP BY , ORDER BY , of HAVING clausules om naar de kolom te verwijzen:

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;

Standaard SQL verbiedt verwijzingen naar kolomaliassen in een WHERE clausule. Deze beperking wordt opgelegd omdat wanneer de WHERE clausule wordt geëvalueerd, is de kolomwaarde mogelijk nog niet bepaald. De volgende zoekopdracht is bijvoorbeeld illegaal:

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

De WHERE clausule bepaalt welke rijen moeten worden opgenomen in de GROUP BY clausule, maar het verwijst naar de alias van een kolomwaarde die pas bekend is nadat de rijen zijn geselecteerd, en gegroepeerd op de GROUP BY .

In de selectielijst van een zoekopdracht kan een alias van een kolom tussen aanhalingstekens worden opgegeven met behulp van een id of tekenreeks tussen aanhalingstekens:

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

Elders in de instructie moeten geciteerde verwijzingen naar de alias id-aanhalingstekens gebruiken, anders wordt de verwijzing behandeld als een letterlijke tekenreeks. Deze instructie groepeert bijvoorbeeld op de waarden in kolom-ID, waarnaar wordt verwezen met de alias a :

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

Maar deze instructie groepeert op de letterlijke tekenreeks 'a' en werkt niet zoals verwacht:

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

Bron:https://docs.oracle .com/cd/E17952_01/refman-5.0-en/problemen-met-alias.html



  1. LEAST() Functie in Oracle

  2. Hoe een deel van de tekenreeks te krijgen die overeenkomt met de reguliere expressie in Oracle SQL?

  3. Retourneer een lijst met tijdzones die worden ondersteund door PostgreSQL

  4. PLS-00103 een externe tabel maken met dynamische SQL