Table 'db_session' 被指定了两次,既作为 'DELETE' 的目标又作为单独的数据源

Table 'db_session' is specified twice, both as a target for 'DELETE' and as a separate source for data

正在尝试 运行 这个 sql 查询,但我收到上面的错误:

DELETE FROM db_session
where time NOT IN (SELECT MAX(time) FROM db_session GROUP BY username)

SELECT 功能虽然按预期工作。

导致此问题的唯一数据库(据我所知)是 MySQL(和相关数据库)。您可以用 JOIN:

替换逻辑
delete s
    from db_session s join
         (select username, max(time) as maxtime
          from db_session s2
          group by username
         ) ss
         on s.username = ss.username and s.time < ss.maxtime;

一个额外的好处是逻辑也正确。您的逻辑会删除时间不是 any username 的最长时间的所有行。但是,如果不同的行恰好是某些 other 用户的最长时间,它可以为用户名保留多行。