我有一个表格,其中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
答案 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
,它通过delete
在using
中表示:
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;