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

Postgres 9.5 ON CONFLICT DO SELECT

    CTEを使用できます:

    WITH cte AS (
       INSERT INTO "user"(timestamp, user_id, member_id)
       values ($1, $2, $3)
       ON CONFLICT (user_id, member_id) DO NOTHING
       RETURNING user_id
    )
    SELECT NULL AS result
    WHERE EXISTS (SELECT 1 FROM cte)          -- success
    UNION ALL
    SELECT id 
    FROM "user" 
    WHERE user_id = $2 
      AND NOT EXISTS (SELECT 1 FROM cte);     -- conflict
    

    DBFiddleデモ




    1. Excelの日付のシリアル番号を通常の日付に変換します

    2. MySQLとMariaDBの6つの一般的な障害シナリオ、およびそれらを修正する方法

    3. エラー#1054-'NEWの不明な列'program_id'

    4. 複雑なMySQLクエリの間違った結果