Ho bisogno di aggiornare una tabella utilizzando un valore cancellato da un'altra tabella. La situazione è un segnapunti di voto di commento simile a quello su SO. Sto usando python per far funzionare i postgres, ma questo non dovrebbe fare la differenza.Utilizzo del valore di ritorno da DELETE per UPDATE in 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'errore si pone a (DELETE FROM
; si verifica un errore di sintassi. Posso sostituire l'istruzione DELETE
con una dichiarazione SELECT
e funzionerà, c'è qualcosa che mi manca qui? Voglio usare il valore restituito in un aggiornamento. È possibile? Tutto aiuta.
schema Relevant:
CREATE TABLE history (
commentId bigint,
vote int,
userIdentity varchar(256),
);
CREATE TABLE comment (
id bigint,
score bigint,
);
history.vote è normalmente 1
o -1
.
Questo funziona come previsto, la rimozione del voto nella storia e aggiornare il punteggio di voto atomicamente. Grazie! – JDong
Wow, è incredibile quanto puoi fare in una dichiarazione con 'WITH'. – danneu