sql >> Database teknologi >  >> RDS >> PostgreSQL

Indsæt hvis det ikke findes, ellers returner id i postgresql

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

For at returnere rækken, hvis den allerede eksisterer

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

Hvis rækken ikke eksisterer, vil den returnere den indsatte ellers den eksisterende.

BTW, hvis parret "nøgle"/"værdi" gør det unikt, så er det den primære nøgle, og der er ikke behov for en id-kolonne. Medmindre et eller begge af "nøgle"/"værdi"-parret kan være null.



  1. Formattering af data i Power BI Desktop-visualiseringer

  2. Android JDBC virker ikke:ClassNotFoundException på driveren

  3. Hvordan kan jeg importere data fra ASCII (ISO/IEC 8859-1) til min Rails/PGSQL-database?

  4. Brug af TUPLES til at sætte mere end 1000 indgange i SQL IN-sætning