sql >> Database >  >> RDS >> PostgreSQL

Postgresql, bijwerken of invoegen op basis van geval

Ik wilde dit ook al eens doen, na er naar te hebben gekeken en een beetje vallen en opstaan, kwam ik met deze werkende oplossing.

gebruik de with verklaring

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;

Probeer de update eerst om de bijgewerkte rij te retourneren, als er geen rij is geretourneerd door de update, voeg dan de rij in die de ingevoegde rij retourneert. Selecteer vervolgens een unie van de geretourneerde waarden van de update en de invoeging, aangezien er slechts één zal gebeuren, krijgt u slechts één rij geretourneerd.

Ik hoop dat dit helpt



  1. MySQL LIKE met bereik werkt niet

  2. PDO PHP - Vind alle rijen tussen 2 datums - toont blanco

  3. Selecteer een willekeurige rij uit een PostgreSQL-tabel met gewogen rijkansen

  4. Hoe recursie in een trigger in PostgreSQL te voorkomen?