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

Sử dụng giá trị trả về từ DELETE cho UPDATE trong Postgres

PostgreSQL không cho phép kết hợp các câu lệnh UPDATE và DELETE dưới dạng truy vấn con.

Bạn có thể sử dụng chiến lược khác một chút - CTE có thể cập nhật

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

vậy

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)

Chú ý:Nó yêu cầu 9.1 hoặc mới hơn




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao một số nhận dạng trong TẠO BẢNG được dấu ngoặc kép mà không phải là những số khác?

  2. Không thể chèn JSON từ PostgreSQL vàoasticsearch. Gặp lỗi - "Ngoại lệ khi thực hiện truy vấn JDBC"

  3. Ghi nhật ký truy vấn postgresql cụ thể bằng cách sử dụng pg-promise

  4. Làm cách nào để đếm ngày Chủ nhật của tháng hiện tại bằng psql?

  5. Kiểm tra các mục tiêu thống kê trong PostgreSQL