Maison >base de données >tutoriel mysql >Pourquoi MySQL génère-t-il une erreur « #1054 - Colonne inconnue » lors de l'utilisation d'alias de colonne dans les clauses WHERE ?
Alias de clause WHERE et de colonne MySQL : dépannage de l'erreur « #1054 - Colonne inconnue »
Les requêtes MySQL produisent parfois l'erreur "#1054 - Colonne inconnue 'guaranteed_postcode' dans la sous-requête 'IN/ALL/ANY'" lors de l'utilisation d'alias de colonne dans la clause WHERE. En effet, le SQL standard empêche l'utilisation d'alias dans la clause WHERE en raison d'incohérences potentielles dans la détermination de la valeur de colonne lors de l'exécution. La base de données n'a pas encore attribué de valeurs à l'alias lorsque la clause WHERE est traitée.
Le manuel MySQL indique clairement que les alias ne sont valides que dans les clauses GROUP BY, ORDER BY ou HAVING. Ces clauses fonctionnent après la récupération des données, garantissant la disponibilité des alias.
Votre requête utilise probablement SUBSTRING(locations.raw,-6,4)
alias guaranteed_postcode
dans la clause WHERE. Étant donné que MySQL rencontre l'alias avant que la valeur de la colonne ne soit calculée, il génère l'erreur.
Pour corriger cela, utilisez la clause HAVING (pour les fonctions d'agrégation ou les calculs) ou une sous-requête dans la clause WHERE. La sous-requête évite d'utiliser l'alias directement dans la clause WHERE de la requête principale, fournissant ainsi le filtrage nécessaire sans violer les règles de MySQL.
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!