使用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还很陌生,而且很想学习。我只是不知道除了连接表之外,是否还会从原始表中删除。
1条答案
按热度按时间xtfmy6hx1#
这里的错误信息并不十分清楚。
对于删除查询,您的CTE需要有
USING
子句。因此: