MySQL使用同一个表上的子查询删除

时间:2018-03-28 17:50:19

标签: mysql sql-update subquery inner-join sql-delete

使用以下查询,我可以返回我需要的结果。

SELECT t1.*
FROM lms_attendance t1
WHERE t1.id = (SELECT t2.id
             FROM lms_attendance t2
             WHERE t2.user = t1.user            
             ORDER BY t2.id DESC
             LIMIT 1)

但是,当尝试执行DELETE时,这不起作用。通过反复试验,我得到unknown columncan't specify target updated in from clause。这里的主要问题是我必须拥有WHERE子句,以便它返回每个用户的最大id,而不是整个表。

1 个答案:

答案 0 :(得分:0)

请尝试以下查询。在运行删除之前,请先运行一个选择以确认它是否是正确的记录。如果您也保留备份表,那就更好了。

运行选择:

SELECT t1.* FROM lms_attendance t1
LEFT JOIN (SELECT user, MAX(id) id
           FROM lms_attendance
           GROUP BY user) t2
ON t1.id = t2.id
WHERE t2.id IS NULL 

如果看起来不错;

DELETE t1.* FROM lms_attendance t1
LEFT JOIN (SELECT user, MAX(id) id
           FROM lms_attendance
           GROUP BY user) t2
ON t1.id = t2.id
WHERE t2.id IS NULL