Maison >base de données >tutoriel mysql >Puis-je utiliser des alias dans la clause WHERE de MySQL ?
Clause MySQL WHERE : limitations des alias
MySQL permet d'aliaser les colonnes pour une meilleure lisibilité et de créer de nouvelles expressions dans les requêtes. Cependant, l'utilisation directe d'alias dans la clause WHERE
entraîne souvent une erreur de « colonne inconnue ». En effet, la clause WHERE
filtre les lignes avant que les alias ne soient attribués.
Solutions de contournement :
Une solution consiste à utiliser la clause HAVING
. Contrairement à WHERE
, HAVING
opère après le regroupement et l'agrégation, permettant la référence aux alias créés dans la requête :
<code class="language-sql">SELECT *, AVG(rev_rating) AS avg_rating FROM reviews GROUP BY rev_id HAVING avg_rating > 5;</code>
Ici, avg_rating
est correctement référencé dans HAVING
.
Pour réaliser un filtrage similaire dans la clause WHERE
, vous devez remplacer l'alias par son expression complète :
<code class="language-sql">SELECT * FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
Considérations importantes :
La clause WHERE
ne prend pas en charge toutes les expressions, en particulier les fonctions d'agrégation comme SUM()
ou AVG()
utilisées dans les alias. Dans de tels cas, HAVING
est indispensable.
Comme l'explique la documentation MySQL, le référencement des alias de colonnes dans WHERE
est interdit car leurs valeurs peuvent ne pas être calculées au moment de l'exécution de la clause WHERE
.
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!