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

Làm cách nào để CẬP NHẬT / CHÈN có điều kiện sau khi XÓA mà không tìm thấy hàng?

Nếu DELETE không tìm thấy hàng nào đủ điều kiện, RETURNING của nó mệnh đề trả về không có hàng .

Tiêu đề yêu cầu "CẬP NHẬT / CHÈN có điều kiện sau khi XÓA" , nhưng cơ thể phàn nàn rằng "không thành công nếu không có hàng nào để xóa" . Nếu sự tồn tại của một hàng cần xóa không phải là điều kiện, thì điều kiện là gì?

Đi chơi bằng tay chân, điều này có thể là những gì bạn muốn:

CREATE FUNCTION updateoutfit(_id UUID, _title text DEFAULT NULL::text, _garments json)
  RETURNS TABLE (id UUID, title text, garments json)
  LANGUAGE sql AS
$func$
DELETE FROM outfit_garment WHERE outfit_id = _id;  -- DELETE if exists

INSERT INTO outfit (id, title)  -- UPSERT outfit
VALUES (_id, _title)
ON CONFLICT (id) DO UPDATE
SET    title = EXCLUDED.title;
   
WITH ins AS (  -- INSERT new rows in outfit_garment
   INSERT INTO outfit_garment (position_x, outfit_id)
   SELECT "positionX", _id
   FROM   json_to_recordset(_garments) AS x("positionX" float)  -- outfit_id UUID was unused!
   RETURNING json_build_object('positionX', position_x) AS garments
   )
SELECT _id, _title, json_agg(garments)
FROM   ins
GROUP  BY id, title;
$func$;

Nó xóa tất cả các hàng khỏi bảng outfit_garment cho UUID đã cho, sau đó chèn hoặc cập nhật một hàng trong bảng outfit và cuối cùng thêm các hàng chi tiết mới trong bảng outfit_garment . Bất kỳ outfit_id nào được chuyển vào _garments bị bỏ qua.
Sau đó, nó trả về một hàng duy nhất với tất cả hàng may mặc được kết hợp thành một giá trị JSON.



  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ự kết hợp độc đáo trong một bảng

  2. Cách to_date () hoạt động trong PostgreSQL

  3. Truy vấn SQL để khớp một trong nhiều chuỗi

  4. Cách thích hợp để chú thích một trường xếp hạng cho một bộ truy vấn

  5. Tôi muốn trả về cột mới bằng cách sử dụng Đệ quy trong SQL?