Maison >base de données >tutoriel mysql >Comment utiliser les alias dans les clauses WHERE de PostgreSQL sans erreurs ?

Comment utiliser les alias dans les clauses WHERE de PostgreSQL sans erreurs ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-20 20:16:16228parcourir

How to Use Aliases in PostgreSQL WHERE Clauses Without Errors?

Éviter les erreurs « la colonne n'existe pas » lors de l'utilisation d'alias dans les clauses WHERE de PostgreSQL

Les requêtes PostgreSQL peuvent générer une erreur « la colonne n'existe pas » lors de l'utilisation d'alias dans la clause WHERE, même si l'alias est défini dans la liste SELECT. Cela se produit parce que la clause WHERE est traitée avant la liste SELECT, ce qui signifie que l'alias n'est pas encore reconnu.

Pour surmonter ce problème, utilisez une clause WITH (également connue sous le nom d'expression de table commune ou CTE). Une clause WITH crée un jeu de résultats nommé temporaire, vous permettant de référencer l'alias dans la requête principale.

Voici un exemple illustrant la solution :

<code class="language-sql">WITH jobs_with_lead_state 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_with_lead_state
WHERE lead_state = 'NEW';</code>

Cette requête révisée définit un CTE nommé jobs_with_lead_state. Le CTE effectue les opérations initiales SELECT et JOIN, générant l'alias lead_state. La requête principale utilise alors ce CTE, permettant à la clause WHERE de référencer correctement lead_state. Cette approche évite l'erreur en garantissant que l'alias est disponible lors de l'évaluation 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!

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