使用select语句删除记录

时间:2019-09-13 05:59:12

标签: postgresql

我必须删除计数大于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最少的项目。

1 个答案:

答案 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组值的记录为那个小组。这就是您要求的逻辑。