PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql, zaktualizuj lub wstaw w zależności od przypadku

Chciałem to zrobić, po zapoznaniu się z tym i małych próbach i błędach wymyśliłem to działające rozwiązanie.

użyj with oświadczenie

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;

Spróbuj zaktualizować najpierw zwracając zaktualizowany wiersz, jeśli nie ma wiersza zwróconego z aktualizacji, a następnie wstaw wiersz zwracający wstawiony wiersz. Następnie wybierz sumę zwróconych wartości z aktualizacji i wstawienia, ponieważ zdarzy się tylko jeden, otrzymasz zwrócony tylko jeden wiersz.

Mam nadzieję, że to pomoże



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować postgresql postgresql.conf listen_addresses dla wielu adresów IP

  2. Znajdź proporcję każdego X składającego się z Y w PostgreSQL?

  3. W Railsach nie można utworzyć bazy danych dla {adapter=>postgresql,

  4. Wiele WSTAWEK w jednym stole i wiele do wielu tabel

  5. Czy możemy zdefiniować funkcję GROUP_CONCAT w PostgreSQL?