我必须删除计数大于1的记录。为此,第一步,我需要从计数大于1的rec_id
表中选择custd
,并删除该数据rec_id
除外,rec_id
的ID值最高。
select rec_id , field_id, count(*)
from mst.custom_data cd
group by rec_id, field_id
having count(*) > 1;
输出如下:
rec_id field_id count
141761; 3; 2
117460; 7; 2
141970; 2; 2
select * from mst.custom_data where rec_id = '141761' and field_id=3
id field_id rec_id
200; 3; 141761
53791; 3; 141761
因此,应删除ID最少的项目。
答案 0 :(得分:1)
我们可以在此处尝试使用相关子查询:
DELETE
FROM mst.custom_data m1
WHERE EXISTS (SELECT 1 FROM mst.custom_data m2
WHERE m1.rec_id = m2.rec_id AND m1.field_id = m2.field_id
GROUP BY rec_id, field_id
HAVING COUNT(*) > 1 AND MAX(m2.id) > m1.id);
如果要删除的外部(rec_id, field_id)
严格小于最大id
,则相关子查询将返回给定id
组值的记录为那个小组。这就是您要求的逻辑。