sql >> Database >  >> RDS >> PostgreSQL

Invoegen indien niet bestaat, anders id retourneren in postgresql

Ja, er is 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"

De rij retourneren als deze al bestaat

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

Als de rij niet bestaat, wordt de ingevoegde en de bestaande geretourneerd.

Trouwens, als het paar "sleutel"/"waarde" het uniek maakt, dan is het de primaire sleutel en is er geen id-kolom nodig. Tenzij een of beide van het "sleutel"/"waarde"-paar null kan zijn.



  1. SQL Server 2017:SQL Server-gegevens kopiëren van Linux naar Windows met SSIS

  2. Wat betekent ORDER BY (SELECT NULL)?

  3. Levensverzekeringsgegevensmodel

  4. GROUP_CONCAT in SQLite