Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser d'alias dans la clause HAVING de SQL ?

Pourquoi ne puis-je pas utiliser d'alias dans la clause HAVING de SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 15:30:151009parcourir

Why Can't I Use Aliases in SQL's HAVING Clause?

Comprendre les limites de l'utilisation d'alias dans les clauses HAVING

En SQL, il peut sembler intuitif d'utiliser des alias pour les agrégats dans la clause HAVING. Cependant, cette approche entraîne l'erreur « Nom de colonne invalide » en raison de l'ordre d'évaluation spécifique des requêtes SQL.

Pour comprendre cette limitation, il est crucial de comprendre comment SQL exécute une requête :

  1. Il crée d'abord un ensemble de résultats en combinant toutes les lignes des tables jointes spécifiées dans la clause FROM.
  2. La clause WHERE filtre les lignes qui ne correspondent pas à ses critères.
  3. Il regroupe ensuite les lignes en fonction des colonnes spécifiées dans la clause GROUP BY.
  4. Il est important de noter que la clause HAVING est évaluée avant l'instruction SELECT. Cela signifie que SQL ne reconnaît pas encore les alias définis dans la clause SELECT à ce stade.
  5. Ce n'est qu'après avoir évalué la clause HAVING que SQL procède à l'évaluation des expressions dans le Liste SELECT.

Par conséquent, puisque la clause HAVING est évaluée avant la clause SELECT, l'alias attribué à l'agrégat dans l'instruction SELECT (par exemple, "col7") n'est pas encore connu de SQL lorsque il évalue l'expression HAVING. Par conséquent, l'erreur « Nom de colonne invalide 'col7' » se produit.

En revanche, la clause ORDER BY est évaluée après l'instruction SELECT, permettant d'utiliser les alias définis dans la clause SELECT. En effet, la clause ORDER BY opère sur le jeu de résultats créé par l'instruction SELECT.

Pour remédier à ce problème, remplacez l'alias dans la clause HAVING par l'expression d'agrégation réelle, comme indiqué ci-dessous :

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn