Maison >base de données >tutoriel mysql >Pourquoi ma clause WHERE de PostgreSQL ne reconnaît-elle pas ma colonne d'alias SELECT ?
PostgreSQL : résoudre les problèmes de colonne d'alias dans les clauses WHERE
Les erreurs rencontrées lorsque la clause WHERE
de PostgreSQL ne parvient pas à reconnaître les alias SELECT
proviennent de l'ordre de traitement des requêtes de la base de données. Contrairement à certains autres systèmes (comme MySQL), PostgreSQL traite la clause WHERE
avant la clause SELECT
. Par conséquent, les alias définis uniquement dans la liste SELECT
ne sont pas disponibles dans la clause WHERE
.
Solution efficace : expressions de table communes (CTE)
La solution la plus efficace consiste à utiliser une expression de table commune (CTE). Un CTE agit comme un jeu de résultats temporaire et nommé, vous permettant de définir des alias, puis de les référencer ultérieurement dans la requête :
<code class="language-sql">WITH jobs_refined AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_state FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM jobs_refined WHERE lead_state = 'NEW';</code>
Cette requête améliorée utilise le CTE jobs_refined
pour définir lead_state
. La clause WHERE
peut alors utiliser correctement cet alias car le CTE l'a déjà traité et défini. Cette approche évite l'erreur d'origine et fournit une requête plus propre et plus lisible.
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!