加入并返回数据时如何从表中删除行?

Ali*_*eza 6 postgresql join delete select

我有两个疑问:

第一个如下:

SELECT * 
FROM batch bp 
  INNER JOIN sender_log sl ON sl.id=bp.log_id 
    AND bp.protocol='someprotocol'
Run Code Online (Sandbox Code Playgroud)

第二个查询用于删除行:

delete from batch where protocol='someprotocol'
Run Code Online (Sandbox Code Playgroud)

我知道在 postgres 中我们有RETURNING *来返回已删除的行。我想要实现的是删除行并在一个查询中返回它们。我怎样才能做到这一点?

Erw*_*ter 13

确实非常简单,但您需要包含另一个WHERE子句:

DELETE FROM batch bp
USING  sender_log sl
WHERE  bp.log_id = sl.id
AND    bp.protocol = 'someprotocol'
RETURNING bp.*, sl.*;
Run Code Online (Sandbox Code Playgroud)

并且要实际返回您的问题概述的内容,您需要在RETURNING子句中包含两个表。