PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres में अद्यतन के लिए DELETE से वापसी मूल्य का उपयोग करना

PostgreSQL सबक्वेरी के रूप में मिक्स UPDATE और DELETE स्टेटमेंट की अनुमति नहीं देता है।

आप थोड़ी अलग रणनीति का उपयोग कर सकते हैं - अपडेट करने योग्य सीटीई

postgres=# WITH t1 AS (DELETE FROM foo RETURNING *), 
                t2 AS (INSERT INTO deleted 
                          SELECT * FROM t1 RETURNING *) 
             SELECT max(a) FROM t2;

तो

postgres=# CREATE TABLE comment(id int, score int);
CREATE TABLE
postgres=# CREATE TABLE history(id int, comment_id int, vote int);
CREATE TABLE
postgres=# INSERT INTO comment values(1,10);
INSERT 0 1
postgres=# INSERT INTO comment values(2,20);
INSERT 0 1
postgres=# INSERT INTO history values(1,1,5);
INSERT 0 1
postgres=# WITH t1 AS (DELETE FROM history 
                       WHERE id=1 
                       RETURNING comment_id, vote) 
           UPDATE comment SET score=score-t1.vote 
           FROM t1 
           WHERE t1.comment_id=comment.id;
UPDATE 1
postgres=# select * from comment;
 id | score 
----+-------
  2 |    20
  1 |     5
(2 rows)

ध्यान दें:इसके लिए 9.1 या नए की आवश्यकता है




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django prefetch_संबंधित सीमा के साथ

  2. PostgreSQL उपयोगकर्ता अनुमतियाँ

  3. त्रुटि:ऑपरेटर मौजूद नहीं है:संख्यात्मक ~* अज्ञात

  4. PostgreSQL पूर्ण पाठ खोज संक्षिप्ताक्षर

  5. TypeOrm के साथ निष्पादित होने पर एक कच्ची PostgreSQL क्वेरी हैंग हो जाती है