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

Postgresql、ケースごとに更新または挿入

    私もこれをやりたいと思っていました。それを調べて少し試行錯誤した後、この実用的な解決策を思いつきました。

    withを使用する ステートメント

    with
    u as (
      update my_table
        set some_value = $2
      where
        id = $1
      returning *
    )
    ,
    i as (
      insert into my_table (id, some_value)
        select $1, $2
      where 
        not exists(select * from u)
      returning *
    )
    
    select * from u
    union
    select * from i;
    

    最初に更新された行を返す更新を試してください。更新から返された行がない場合は、挿入された行を返す行を挿入してください。次に、更新と挿入から返された値の和集合を選択します。1つしか発生しないため、返される行は1つだけです。

    これがお役に立てば幸いです



    1. MySQL全文期間

    2. MariaDBでのSYS_GUID()のしくみ

    3. Dockerでコンテナとして実行されているMySQLDBに接続するにはどうすればよいですか?

    4. WHERE句で変数を使用する