PostgreSQL
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задаване на името на схемата в postgres с помощта на R

  2. Как да използвате смесени int и числови аргументи във функция на Postgres 9.1+

  3. Винаги ли трябва да използвате coalesce в WHERE, ако може да има нулеви/празни стойности в колоните, които сравнявате?

  4. Как мога да актуализирам множество колони на множество редове в postgresql с помощта на psycopg2

  5. Как да преброя всички свързани възли (редове) в графика на Postgres?