ホームページ > データベース > mysql チュートリアル > PostgreSQL の WHERE 句が SELECT エイリアス列を認識しないのはなぜですか?

PostgreSQL の WHERE 句が SELECT エイリアス列を認識しないのはなぜですか?

Barbara Streisand
リリース: 2025-01-20 20:34:16
オリジナル
135 人が閲覧しました

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

PostgreSQL: WHERE 句のエイリアス列の問題に対処する

PostgreSQL の WHERE 句が SELECT エイリアスを認識できないというエラーが発生するのは、データベースのクエリ処理順序が原因です。 他のシステム (MySQL など) とは異なり、PostgreSQL は WHERE 句の SELECT 句を処理します。したがって、SELECT リスト内でのみ定義されたエイリアスは、WHERE 句では使用できません。

効果的な解決策: 共通テーブル式 (CTE)

最も効率的な解決策は、Common Table Expression (CTE) を使用することです。 CTE は一時的な名前付き結果セットとして機能し、エイリアスを定義して、後でクエリ内でそれらを参照できるようにします。

<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>
ログイン後にコピー
この改良されたクエリでは、CTE

を使用して jobs_refined を定義します。 CTE がすでに処理して定義しているため、lead_state 句はこのエイリアスを正しく利用できます。 このアプローチにより、元のエラーが回避され、よりクリーンで読みやすいクエリが提供されます。WHERE

以上がPostgreSQL の WHERE 句が SELECT エイリアス列を認識しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート