sql >> データベース >  >> RDS >> PostgreSQL

Postgresqlのwhere句でAlias列を使用する

    私は同じ問題に苦労しました、そして「mysql構文は非標準です」は私の意見では有効な議論ではありません。 PostgreSQLは、「INSERT ... RETURNING ...」などの便利な非標準拡張機能も追加して、挿入後に自動IDを取得します。また、大規模なクエリを繰り返すことは、洗練された解決策ではありません。

    ただし、WITHステートメントは非常に役立ちました(CTE)。クエリ内に一時的なビューを作成し、通常のテーブルのように使用できます。 JOINを正しく書き直したかどうかはわかりませんが、一般的には次のように機能するはずです。

    WITH jobs_refined AS (
        SELECT
            jobs.*,
            (SELECT 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'
    


    1. MySQLのselectステートメントとCASEまたはIFELSEIF?結果を得る方法がわからない

    2. LEFT OUTER JOINは、どのようにして左側のテーブルに存在するよりも多くのレコードを返すことができますか?

    3. Oracle:max(id)+1とsequence.nextvalの違い

    4. Oracleでシーケンスをリセットするにはどうすればよいですか?