web-dev-qa-db-ja.com

結合してデータを返すときにテーブルから行を削除するにはどうすればよいですか?

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つのクエリで返すことです。どうすればこれを達成できますか?

6
ALH

確かに非常に単純ですが、doには、他のWHERE句も含める必要があります。

DELETE FROM batch bp
USING  sender_log sl
WHERE  bp.log_id = sl.id
AND    bp.protocol = 'someprotocol'
RETURNING bp.*, sl.*;

そして、質問の概要を実際に返すには、両方のテーブルを RETURNING に含める必要があります。

13

非常にシンプルです。

DELETE FROM batch bp
USING sender_log sl
WHERE bp.log_id = sl.id
RETURNING sl.packet

;-)

3
ALH