我必须删除计数大于 1 的记录。为此,在第一步中,我需要从 custd
表中选择计数大于的 rec_id
1 并删除该特定 rec_id
的数据,但具有最高 id 值的 rec_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 的上述内容。
最佳答案
我们可以在这里尝试使用相关子查询:
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
。这是您要求的逻辑。
关于postgresql - 使用 select 语句删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57918050/