sql,只保留最大值并删除其他值

时间:2014-12-13 22:53:46

标签: mysql sql max delete-row

我有这种表:


-id |名字|备忘录

-1 | Gotham | s1ep1

-2 | Gotham | s1ep3

-3 | Gotham | s1ep5


我想保留带有max(备忘录)的条目并删除其他条目,所以只保留第三个(ep5)。

我可以按名称检索所有max(备忘录)组的结果:

    SELECT id,max(memo) FROM `reminder` group by name

但我找不到删除他人的正确方法,即使是在查看类似主题。

我希望" 删除所有不在我选择中的条目"。

    delete from reminder where not exists (SELECT id,max(memo) FROM `reminder` group by name)

但它不起作用," 您无法指定目标表'提醒'用于FROM子句中的更新"。我必须做得很糟糕。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用join

执行此操作
delete r
    from reminder r left join
         (select name, max(memo) as maxmemo
          from reminder
          group by name
         ) rn
         on r.name = rn.name and r.memo = rn.maxmemo
    where rn.name is null;

暂且不说。更典型的是,人们希望保持行具有最高id。结构是一样的,只是列不同:

delete r
    from reminder r left join
         (select name, max(id) as maxid
          from reminder
          group by name
         ) rn
         on r.name = rn.name and r.id = rn.maxid
    where rn.name is null;
相关问题