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 :
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!