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

1 sql innodb mariadb

试图运行这个SQL查询,但我收到上面的错误:

DELETE FROM db_session
where time NOT IN (SELECT MAX(time) FROM db_session GROUP BY username)
Run Code Online (Sandbox Code Playgroud)

SELECT 功能虽然按预期工作.

Gor*_*off 6

导致此问题的唯一数据库(据我所知)是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;
Run Code Online (Sandbox Code Playgroud)

额外的好处是逻辑也是正确的.你的逻辑删除其中时间是不是最大的任何时间行任何 username.但是,如果不同的行恰好是某个其他用户的最大时间,那么它可以为用户名保留多行.