Tôi cần cập nhật bảng bằng giá trị đã xóa từ một bảng khác. Tình huống là một người ghi phiếu bầu bình chọn tương tự như người ghi trên SO. Tôi đang sử dụng python để làm việc postgres, nhưng điều đó không nên tạo sự khác biệt.Sử dụng giá trị trả về từ DELETE cho CẬP NHẬT trong Postgres
query="""
UPDATE comment SET score=score-(DELETE FROM history
WHERE commentId=%(commentId)s AND
userIdentity=%(userIdentity)s RETURNING vote)
WHERE commentId=%(commentId)s;
"""
cursor.execute(query, data)
Lỗi phát sinh tại (DELETE FROM
; một lỗi cú pháp phát sinh. Tôi có thể thay thế câu lệnh DELETE
bằng tuyên bố SELECT
và nó sẽ hoạt động, có điều gì tôi thiếu ở đây không? Tôi muốn sử dụng giá trị trả về trong bản cập nhật. Điều này có thể không? Bất cứ điều gì giúp.
schema có liên quan:
CREATE TABLE history (
commentId bigint,
vote int,
userIdentity varchar(256),
);
CREATE TABLE comment (
id bigint,
score bigint,
);
history.vote thường 1
hoặc -1
.
này hoạt động như mong muốn, loại bỏ các lá phiếu trong lịch sử và cập nhật điểm số phiếu bầu một cách nguyên tử. Cảm ơn! – JDong
Chà, thật ngạc nhiên là bạn có thể làm được bao nhiêu trong một câu lệnh với 'WITH'. – danneu