sql >> Databáze >  >> RDS >> PostgreSQL

Vložte, pokud neexistuje, jinak vraťte id v postgresql

Ano, 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"

Vrátit řádek, pokud již existuje

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

Pokud řádek neexistuje, vrátí vložený řádek existující.

BTW, pokud je pár "klíč"/"hodnota" jedinečný, pak je to primární klíč a není potřeba sloupec id. Pokud jeden nebo oba z páru "klíč"/"hodnota" nemohou mít hodnotu null.



  1. Propojené servery Salesforce.com a sp_columns_ex

  2. Jak vložit/aktualizovat větší velikost dat v tabulkách Oracle?

  3. Chyba operačního systému SQL Server 5:5 (Přístup odepřen.)

  4. Příklady ADDTIME() – MySQL