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 ?

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 ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 20:31:13532parcourir

Why Does My PostgreSQL WHERE Clause Fail to Recognize an Aliased Column, and How Can I Fix It Using a 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn