Maison >base de données >tutoriel mysql >Pourquoi ma clause WHERE de PostgreSQL ne parvient-elle pas à reconnaître une colonne avec alias et comment puis-je la corriger à l'aide d'un CTE ?
Clause WHERE PostgreSQL et colonnes avec alias : un problème et sa solution
Lorsque vous utilisez une colonne avec un alias (comme "lead_state") dans une clause PostgreSQL WHERE, vous pouvez rencontrer une erreur indiquant que la colonne n'existe pas. En effet, PostgreSQL traite la clause WHERE avant la clause SELECT, contrairement à MySQL. Cela signifie que l'alias n'est pas encore défini lorsque la clause WHERE est évaluée.
Résoudre le problème avec une expression de table commune (CTE)
Une solution robuste consiste à utiliser une expression de table commune (CTE). Un CTE agit comme un jeu de résultats temporaire et nommé dans votre requête. Cela vous permet de définir la colonne alias dans le CTE, puis de la référencer dans la clause WHERE de la requête principale.
Voici comment mettre en œuvre cela :
<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>
Le CTE, "jobs_refined", génère la colonne "lead_state". L'instruction SELECT suivante utilise ensuite ce CTE, rendant "lead_state" disponible pour la clause WHERE, résolvant ainsi efficacement l'erreur d'origine. Cette approche garantit une exécution correcte des requêtes dans PostgreSQL.
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!