如何将此更新删除和 select 查询合并为一个?
How do I combine this update delete and select query into one?
- 我正在尝试实现密码重置页面的功能。
- 用户获得存储在数据库中的令牌
- 当用户尝试更新密码时,我想做以下事情
- 检查令牌是否存在且未过期并获取此类令牌的用户 ID
- 更新此用户 ID 以更改密码
- 如果更新成功,则删除此用户 ID 的令牌
这是我通过 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;
- 我正在尝试实现密码重置页面的功能。
- 用户获得存储在数据库中的令牌
- 当用户尝试更新密码时,我想做以下事情
- 检查令牌是否存在且未过期并获取此类令牌的用户 ID
- 更新此用户 ID 以更改密码
- 如果更新成功,则删除此用户 ID 的令牌
这是我通过 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;