【问题标题】:MySQL Delete using subquery on same tableMySQL删除在同一张表上使用子查询
【发布时间】:2018-09-07 12:39:27
【问题描述】:

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

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,而不是整个表。

【问题讨论】:

  • 所以您只想保留每个用户的最大 id?
  • 正确。我试图只保留每个用户的最大 ,同时删除其余的。

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


【解决方案1】:

试试下面的这个查询。请先运行一个选择以确认它是否是正确的记录,然后再运行删除。如果你也保留一个备份表更好。

运行选择:

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2011-09-03
    • 2020-03-31
    • 1970-01-01
    • 2019-05-11
    • 2022-12-07
    相关资源
    最近更新 更多