Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser d'alias de colonne dans les clauses MySQL WHERE ?

Pourquoi ne puis-je pas utiliser d'alias de colonne dans les clauses MySQL WHERE ?

DDD
DDDoriginal
2025-01-22 08:06:12291parcourir

Why Can't I Use Column Aliases in MySQL WHERE Clauses?

Limitations de la clause WHERE et des alias de colonnes de MySQL

L'utilisation d'alias de colonne dans la clause WHERE de MySQL conduit souvent à l'erreur "#1054 - Colonne inconnue dans la sous-requête 'IN/ALL/ANY'". Cet article explique pourquoi et propose des approches alternatives.

MySQL exige que les noms de colonnes dans les clauses WHERE proviennent soit directement de la structure de la table, soit dérivés via la notation par points. Les alias de colonnes, noms temporaires attribués lors du traitement des requêtes, ne sont pas reconnus.

La documentation MySQL l'interdit explicitement. La raison est l'ordre d'exécution de la requête : la clause WHERE est évaluée avant que les alias soient attribués. Par conséquent, l'utilisation d'un alias dans la clause WHERE entraîne un comportement indéfini.

Pour surmonter ce problème, utilisez la clause HAVING. Cette clause est conçue pour filtrer les lignes après le regroupement et l'agrégation, ce qui la rend appropriée lors du filtrage sur des colonnes calculées (comme celles créées avec des alias). Dans les situations où un alias est nécessaire pour le filtrage, l'utilisation de l'alias dans la clause HAVING constitue une solution de contournement viable.

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