PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Masukkan jika tidak ada, jika tidak kembalikan id di postgresql

Ya ada 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"

Untuk mengembalikan baris jika sudah ada

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

Jika baris tidak ada, baris yang dimasukkan akan dikembalikan ke baris yang sudah ada.

BTW, jika pasangan "kunci"/"nilai" membuatnya unik maka itu adalah kunci utama, dan tidak perlu kolom id. Kecuali salah satu atau kedua pasangan "kunci"/"nilai" bisa nol.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan id jika ada baris, MASUKKAN sebaliknya

  2. PostgreSQL 'TIDAK DALAM' dan subquery

  3. Mewakili Tanggal, Waktu, dan Interval di PostgreSQL

  4. instal permata pg tidak berfungsi di OSX Lion

  5. Bagaimana cara menekan pesan INFO saat menjalankan skrip psql