PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как условно да UPDATE/INSERT след DELETE, който не намира редове?

Ако DELETE не намира отговарящ на изискванията ред, неговият RETURNING клаузата връща няма редове .

Заглавието изисква "условно АКТУАЛИЗИРАНЕ/ВМЪКВАНЕ след ИЗТРИВАНЕ" , но тялото се оплаква, че "се проваля, ако няма ред за изтриване" . Ако наличието на ред за изтриване не е условието, тогава какво е условието?

Излизайки на крайник, товаможе бъди това, което искаш:

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$;

Той изтрива всички редове от таблицата outfit_garment за дадения UUID, след това или вмъква, или актуализира ред в таблицата outfit и накрая добавя нови редове с подробности в таблицата outfit_garment . Всеки outfit_id премина в _garments се игнорират.
След това връща един ред с всички облекла, обединени в 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. PostgreSQL UPDATE замяна на подниз

  2. Заявка за избор на множество данни заедно със средни стойности между определено време с помощта на Postgres

  3. Показване на всички резултати в postgresql?

  4. Съхранявайте низ със специални знаци като кавички или обратна наклонена черта в таблицата postgresql

  5. За да актуализирате няколко недублирани реда наведнъж, като използвате Групиране по