试图运行这个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 功能虽然按预期工作.
导致此问题的唯一数据库(据我所知)是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.但是,如果不同的行恰好是某个其他用户的最大时间,那么它可以为用户名保留多行.