2つのクエリがあります。
最初のものは以下のとおりです:
SELECT *
FROM batch bp
INNER JOIN sender_log sl ON sl.id=bp.log_id
AND bp.protocol='someprotocol'
2番目のクエリは行を削除するために使用されます:
delete from batch where protocol='someprotocol'
Postgresでは、削除された行を返すRETURNING *があることを知っています。私が達成したいのは、行を削除して1つのクエリで返すことです。どうすればこれを達成できますか?
確かに非常に単純ですが、doには、他のWHERE
句も含める必要があります。
DELETE FROM batch bp
USING sender_log sl
WHERE bp.log_id = sl.id
AND bp.protocol = 'someprotocol'
RETURNING bp.*, sl.*;
そして、質問の概要を実際に返すには、両方のテーブルを RETURNING
句 に含める必要があります。
非常にシンプルです。
DELETE FROM batch bp
USING sender_log sl
WHERE bp.log_id = sl.id
RETURNING sl.packet
;-)