我有一个包含
的表格id username password last_touch
可能有相同ID的重复条目。 last_touch是最后一个insert命令的时间戳。如何删除所有具有相同ID的条目,除了最后一个条目,所以我总是拥有最新的用户详细信息?
某些地方:
DELETE FROM user_data
WHERE id=1
LIMIT (count(SELECT 1
FROM user_data
WHERE id=1) - 1)
(显然在上面的例子中语法不正确,所以MySQL抱怨。)
答案 0 :(得分:4)
使用嵌套查询为给定的用户ID选择最新的时间戳,并删除该ID的所有行,其时间戳不同于该时间戳:
DELETE FROM user_data
WHERE ID = 1 AND last_touch !=
(SELECT latest FROM
(SELECT MAX(last_touch) AS latest FROM user_data WHERE ID = 1) AS temp
)
更新:根据Frank的评论,修正了对内部SELECT
中正在修改的表的直接引用,并在其周围包含另一个SELECT
。
答案 1 :(得分:2)
DELETE FROM user_data u
WHERE id=1
AND last_touch < (SELECT max(last_touch)
FROM user_data
WHERE id=u.id)