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

时间:2017-07-24 17:54:57

标签: sql mariadb innodb

尝试运行此SQL查询,但我收到上述错误:

TimestampCombiner

DELETE FROM db_session where time NOT IN (SELECT MAX(time) FROM db_session GROUP BY username) 功能虽然按预期工作。

1 个答案:

答案 0 :(得分:5)

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

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