Sql 表“db_session”指定了两次,既作为“DELETE”的目标,也作为单独的数据源
正在尝试运行此sql查询,但出现上述错误:Sql 表“db_session”指定了两次,既作为“DELETE”的目标,也作为单独的数据源,sql,mariadb,innodb,Sql,Mariadb,Innodb,正在尝试运行此sql查询,但出现上述错误: DELETE FROM db_session where time NOT IN (SELECT MAX(time) FROM db_session GROUP BY username) 尽管SELECT function按预期工作。据我所知,导致此问题的唯一数据库是MySQL和相关数据库。您可以使用联接替换逻辑: 另外一个好处是,逻辑也是正确的。逻辑删除时间不是任何用户名的最大时间的任何行。但是,如果一个用户名可以保留多行,而不同的行恰好是其他用户
DELETE FROM db_session
where time NOT IN (SELECT MAX(time) FROM db_session GROUP BY username)
尽管SELECT function按预期工作。据我所知,导致此问题的唯一数据库是MySQL和相关数据库。您可以使用联接替换逻辑:
另外一个好处是,逻辑也是正确的。逻辑删除时间不是任何用户名的最大时间的任何行。但是,如果一个用户名可以保留多行,而不同的行恰好是其他用户的最长时间。据我所知,导致此问题的唯一数据库是MySQL和相关数据库。您可以使用联接替换逻辑:
另外一个好处是,逻辑也是正确的。逻辑删除时间不是任何用户名的最大时间的任何行。但是,如果不同的行恰好是其他用户的最长时间,则它可以为用户名保留多行。使用您正在使用的数据库标记您的问题。使用您正在使用的数据库标记您的问题。这将返回并删除表中的所有行,我想拥有所有唯一的用户名行以及每个行的最大时间。例如,如果有三行user1和两行user2,我想保留一行user1的最大时间和一行user2的最大时间。@NickKapenkar。这不应该删除表中的所有行。s.time
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;