如果表中的下一个记录与特定字段中的值相同,该如何删除记录

时间:2019-05-01 17:16:31

标签: sql postgresql duplicates

我有一个表格,其中cell_id(整数)字段中有重复的值。 我想删除“ n + 1”记录与“ n”相同值的记录

这样,我不会在相邻/连续的记录中出现重复的值。

之前

id | user_id | cell_id
25 | 5973    | 6051
26 | 5973    | 6051
27 | 5973    | 6051
28 | 5973    | 100
29 | 5973    | 256
30 | 5973    | 256
31 | 5973    | 6051
32 | 5973    | 6051

之后

id | user_id | cell_id
25 | 5973    | 6051
28 | 5973    | 100
29 | 5973    | 256
31 | 5973    | 6051

3 个答案:

答案 0 :(得分:0)

您可以使用EXISTS检查是否应删除一行:

delete from tablename t
where 
  exists (
  select 1 from tablename 
  where cell_id = t.cell_id and user_id = t.user_id and id < t.id
  )
  and
  t.cell_id = (select cell_id from tablename where id = 
  (select max(id) from tablename where id < t.id));

请参见demo
结果:

> id | user_id | cell_id
> -: | ------: | ------:
> 25 |    5973 |    6051
> 28 |    5973 |     100
> 29 |    5973 |     256
> 31 |    5973 |    6051

答案 1 :(得分:0)

DELETE
FROM
    object a
        USING object b
WHERE
    a.id < b.id
    AND a.cell_id = b.cell_id;

将“对象”替换为表格名称的位置。

答案 2 :(得分:0)

我只使用join,它通过deleteusing中表示:

delete from t
    using t t2
    where t2.cell_id = t.cell_id and t2.user_id = t.user_id and
          t2.id = t.id + 1;