【发布时间】:2023-01-16 18:29:23
【问题描述】:
使用 PostgreSQL,表 sessions 包含列 id (PK)、user_id 和 expire。我想删除带有id = 'deleteme' 的行,但也想删除同一个人的过期会话,即user_id 与删除的行和expire < now() 匹配。
我发现有效的查询是
WITH temp AS (
DELETE FROM sessions
WHERE id = 'deleteme'
RETURNING user_id)
DELETE FROM sessions
WHERE user_id IN (
SELECT user_id from temp)
AND expire < now()
什么不起作用是
WITH temp AS (
DELETE FROM sessions
WHERE id = 'deleteme'
RETURNING user_id)
DELETE FROM sessions
WHERE user_id = temp.user_id
AND expire < now()
有错误“缺少表'temp'的FROM子句条目”
是否有更简单的查询可以达到与我的第一个查询相同的效果?
编辑:如果有办法通过连接来做到这一点,请让我知道,因为我对 SQL 很陌生并且渴望学习。我只是不知道除了连接表之外,这是否会从原始表中删除。
【问题讨论】:
标签: sql postgresql