postgresql - 使用 select 语句删除记录

标签 postgresql

我必须删除计数大于 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/

相关文章:

postgresql - Postgis 安装

postgresql - 如何在 postgres 中插入 future 的时间戳

sql - 为每个唯一客户端创建 n 行,直至列中的最高值

postgresql - "Server doesn' t listen"in pgAdmin III with postgreSQL

postgresql - PostgreSQL 中两个数值数组的笛卡尔列表?

python - 使用 PostgreSQL 索引的 Django 全文搜索

javascript - 将 javascript 数组保存到 Postgres 多边形字段中

sql - 楼层时间戳精确到秒

sql - 有什么方法可以使用 LISTEN 和 NOTIFY(或 NodeJS)实时监控 Postgresql 查询更改?

python-3.x - 用于为数据库容器创建数据库脚本的 Kubernetes helm