sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql, opdatering eller indsæt baseret på sag

Jeg har også ønsket at gøre dette, efter at have undersøgt det og prøvet og fejlet lidt, fandt jeg frem til denne fungerende løsning.

brug with erklæring

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;

Prøv først opdateringen med at returnere rækken opdateret, hvis der ikke er nogen række returneret fra opdateringen, indsæt derefter rækken, der returnerer den indsatte række. Vælg derefter en forening af de returnerede værdier fra opdateringen og indsættelsen, da kun én vil ske, vil du kun få en række returneret.

Håber dette hjælper



  1. SQL - Hvordan får jeg kun tallene efter decimalen?

  2. Hvordan indsætter man pandas dataramme via mysqldb i databasen?

  3. PostgreSQL:I EN ENKEL SQL-SYNTAX rækkefølge efter numerisk værdi beregnet fra en tekstkolonne

  4. Mac psql/readline - bibliotek ikke indlæst