sql >> Databasteknik >  >> RDS >> PostgreSQL

Infoga om det inte finns, annars returnerar id i postgresql

Ja, det finns 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"

För att returnera raden om den redan finns

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

Om raden inte finns kommer den att returnera den infogade annars den befintliga.

BTW, om paret "nyckel"/"värde" gör det unikt så är det primärnyckeln, och det finns inget behov av en id-kolumn. Såvida inte ett eller båda av paret "nyckel"/"värde" kan vara null.



  1. MySQL-replikering med ProxySQL på WHM/cPanel-servrar:del två

  2. Djupdykning i NoSQL:En komplett lista över NoSQL-databaser

  3. Hur ansluter jag till SQL Server via sqlalchemy med Windows-autentisering?

  4. PHP / MySQL bygga trädmeny