Maison >base de données >tutoriel mysql >Pourquoi ma clause WHERE de PostgreSQL ne reconnaît-elle pas ma colonne d'alias SELECT ?

Pourquoi ma clause WHERE de PostgreSQL ne reconnaît-elle pas ma colonne d'alias SELECT ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 20:34:16181parcourir

Why Doesn't My PostgreSQL WHERE Clause Recognize My SELECT Alias Column?

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!

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