PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мигриране на израз на Oracle MERGE към израз на PostgreSQL UPSERT

Не мисля, че има оператор UPSERT в PostgreSQL 9.3, но можете да направите това:

with cte_dual as (
    select
        v_c1 as key,
        v_c2 as pkey,
        v_c3 as wcount,
        v_c4 as dcount
), cte_update as (
    update my_table as a set
        wcount = b.wcount,
        dcount = b.dcount
    from cte_dual as b
    where b.key = a.key and b.pkey = a.pkey
    returning *
)
insert into my_table (key, pkey, wcount, dcount)
select d.key, d.pkey, d.wcount, d.dcount
from cte_dual as d
where not exists (select * from cte_update as u WHERE u.key = d.key and u.pkey = d.pkey)

Можете да прочетете няколко подобни въпроса:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво означава грешка при импортиране:Символът не е намерен:_PQencryptPasswordConn и как да го поправя?

  2. Изберете отделна потребителска група по период от време

  3. Как мога (или мога) да ИЗБЕРЯ DISTINCT на няколко колони?

  4. Използване на върната стойност от DELETE за UPDATE в Postgres

  5. Как мога да вмъкна коментари на колони в PostgreSQL чрез Python?