我有这种表:
-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子句中的更新"。我必须做得很糟糕。谢谢你的帮助。
答案 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;