ホームページ > データベース > mysql チュートリアル > PostgreSQL の WHERE 句がエイリアス化された列を認識できないのはなぜですか? CTE を使用して修正するにはどうすればよいですか?

PostgreSQL の WHERE 句がエイリアス化された列を認識できないのはなぜですか? CTE を使用して修正するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-20 20:31:13
オリジナル
520 人が閲覧しました

Why Does My PostgreSQL WHERE Clause Fail to Recognize an Aliased Column, and How Can I Fix It Using a CTE?

PostgreSQL の WHERE 句とエイリアス化された列: 問題とその解決策

PostgreSQL の WHERE 句内でエイリアス化された列 (「lead_state」など) を使用すると、列が存在しないことを示すエラーが発生する場合があります。これは、MySQL とは異なり、PostgreSQL は SELECT 句のに WHERE 句を処理するためです。 これは、WHERE 句が評価される時点ではエイリアスがまだ定義されていないことを意味します。

共通テーブル式 (CTE) による問題の解決

堅牢な解決策は、Common Table Expression (CTE) を利用することです。 CTE は、クエリ内で一時的な名前付き結果セットとして機能します。 これにより、CTE 内でエイリアスされた列を定義し、それをメイン クエリの WHERE 句で参照できるようになります。

これを実装する方法は次のとおりです:

<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」は「lead_state」列を生成します。後続の SELECT ステートメントではこの CTE が使用され、WHERE 句で「lead_state」が使用できるようになり、元のエラーが効果的に解決されます。 このアプローチにより、PostgreSQL でクエリを正しく実行できるようになります。

以上がPostgreSQL の WHERE 句がエイリアス化された列を認識できないのはなぜですか? CTE を使用して修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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