如何将此更新删除和 select 查询合并为一个?

How do I combine this update delete and select query into one?

这是我通过 3 个单独的查询得出的结果

SELECT user_id FROM reset_tokens WHERE token =  AND now() < expires
UPDATE users SET password= WHERE user_id= RETURNING user_id
DELETE FROM reset_tokens WHERE user_id=

如何将这些组合成 1 个查询?谢谢你的建议

如果没有执行更新则不会删除

您可以使用 CTE:

    WITH s as (
          SELECT user_id
          FROM reset_tokens
          WHERE token =  AND now() < expires
         ),
         u as (
          UPDATE users
              SET password = 
              WHERE user_id = 
              RETURNING user_id
        ),
        d as (
         DELETE FROM reset_tokens
             WHERE user_id = 
        )
SELECT *
FROM s;