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 या नए की आवश्यकता है