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!