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

Вмъкнете, ако не съществува, иначе върнете идентификатора в postgresql

Да, има returning

INSERT INTO tag ("key", "value")
SELECT 'key1', 'value1'
WHERE NOT EXISTS (
    SELECT id, "key", "value"
    FROM node_tag
    WHERE key = 'key1' AND value = 'value1'
    )
returning id, "key", "value"

За да върнете реда, ако вече съществува

with s as (
    select id, "key", "value"
    from tag
    where key = 'key1' and value = 'value1'
), i as (
    insert into tag ("key", "value")
    select 'key1', 'value1'
    where not exists (select 1 from s)
    returning id, "key", "value"
)
select id, "key", "value"
from i
union all
select id, "key", "value"
from s

Ако редът не съществува, той ще върне вмъкнатия, друг съществуващ.

BTW, ако двойката "ключ"/"стойност" го прави уникален, тогава това е първичният ключ и няма нужда от колона за идентификатор. Освен ако едната или и двете двойки "ключ"/"стойност" могат да бъдат нулеви.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на [archiver] неподдържана версия (1.13) в заглавката на файла при стартиране на pg_restore

  2. Инсталации на postgresql с един екземпляр

  3. Как да картографирате PostgreSQL enum с JPA и Hibernate

  4. Заявка за брой различни стойности в подвижния период от време

  5. Разработване на PostgreSQL за Windows, част 3