PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chèn nếu không tồn tại, nếu không trả về id trong postgresql

Có, có 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"

Để trả lại hàng nếu nó đã tồn tại

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

Nếu hàng không tồn tại, nó sẽ trả về hàng được chèn khác với hàng hiện có.

BTW, nếu cặp "key" / "value" làm cho nó trở thành duy nhất thì nó là khóa chính và không cần cột id. Trừ khi một hoặc cả hai cặp "khóa" / "giá trị" có thể là giá trị rỗng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng địa chỉ email làm khóa chính?

  2. Cách đặt Định dạng đầu ra khoảng thời gian trong PostgreSQL

  3. Kiến thức cơ bản về kích hoạt PostgreSQL và hàm được lưu trữ

  4. Cập nhật mật khẩu PostgreSQL của bạn trong Linux

  5. Bí danh tham chiếu trong mệnh đề WHERE