Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego użycie aliasu kolumny w tym samym wyborze nie jest obsługiwane w Oracle i Mysql?

Aliasu można użyć w liście wyboru zapytania, aby nadać kolumnie inną nazwę. Możesz użyć aliasu w GROUP BY , ORDER BY lub HAVING klauzule odnoszące się do kolumny:

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;

Standardowy SQL nie zezwala na odwołania do aliasów kolumn w WHERE klauzula. To ograniczenie jest nałożone, ponieważ gdy WHERE klauzula jest oceniana, wartość kolumny mogła nie zostać jeszcze określona. Na przykład następujące zapytanie jest niedozwolone:

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

WHERE klauzula określa, które wiersze powinny być zawarte w GROUP BY klauzula, ale odnosi się do aliasu wartości kolumny, która nie jest znana, dopóki wiersze nie zostaną wybrane i pogrupowane według GROUP BY .

Na liście wyboru zapytania alias kolumny w cudzysłowie można określić za pomocą identyfikatora lub znaków cudzysłowu:

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

W innym miejscu instrukcji cytowane odniesienia do aliasu muszą używać cytowania identyfikatora lub odwołanie jest traktowane jako literał ciągu. Na przykład ta instrukcja grupuje według wartości w kolumnie id, do której odwołuje się alias a :

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

Ale to stwierdzenie grupuje się według dosłownego ciągu „a” i nie będzie działać zgodnie z oczekiwaniami:

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

Źródło:https://docs.oracle .com/cd/E17952_01/refman-5.0-en/problems-with-alias.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie wszystkich dzieci i dzieci od rodzica JPA

  2. zapytanie sql, aby określić najbardziej podobne towary według tagów

  3. Zapytanie MySQL na dwóch różnych polach

  4. APPARENT DEADLOCK Tworzenie wątków awaryjnych dla nieprzypisanych zadań oczekujących

  5. Jak zaokrąglić znacznik czasu w MySQL