如何使用 h2 中的一个查询删除重复项

问题描述

我需要删除特定字段 (instrument_id) 的重复记录,只保留 id 之前的第一条记录。

使用 MysqL 示例,此查询如下所示:

DELETE t1 FROM instrument_bit_detail t1,instrument_bit_detail t2
WHERE t1.id > t2.id AND
t1.instrument_id = t2.instrument_id;

创建表的示例:

CREATE TABLE `instrument_bit_detail` (
  `id` bigint(20) NOT NULL,`instrument_id` bigint(20) NOT NULL,`modification_time` datetime DEFAULT NULL
)

但是当使用H2hsqldb数据库时,此查询无法执行,表示语法错误

有什么方法可以完成类似于上述查询的重复删除,但可以在 h2hsqldb 数据库上完成?

解决方法

像这样的简单查询应该可以解决问题:

DELETE FROM instrument_bit_detail t1
WHERE t1.id > (SELECT MIN(t2.id) FROM instrument_bit_detail t2 WHERE t1.instrument_id = t2.instrument_id )

编辑: 由于您似乎有一些语法错误,以下是我在 h2 网络控制台(1.4.200 版)上测试的内容。

创建表

CREATE TABLE instrument_bit_detail (
  id bigint(20) NOT NULL,instrument_id bigint(20) NOT NULL,modification_time datetime DEFAULT NULL
);

用数据填充表

insert into instrument_bit_detail(id,instrument_id,modification_time) values(1,10,CURRENT_DATE);
insert into instrument_bit_detail(id,modification_time) values(2,11,modification_time) values(3,modification_time) values(4,12,modification_time) values(5,modification_time) values(6,modification_time) values(7,CURRENT_DATE);

选择输出

ID      INSTRUMENT_ID   MODIFICATION_TIME  
1       10              2020-12-22 00:00:00
2       11              2020-12-22 00:00:00
3       10              2020-12-22 00:00:00
4       12              2020-12-22 00:00:00
5       11              2020-12-22 00:00:00
6       10              2020-12-22 00:00:00
7       12              2020-12-22 00:00:00

运行删除

DELETE FROM instrument_bit_detail t1 WHERE t1.id > (SELECT MIN(t2.id) FROM instrument_bit_detail t2 WHERE t1.instrument_id = t2.instrument_id );

删除后选择输出

ID      INSTRUMENT_ID   MODIFICATION_TIME  
1       10              2020-12-22 00:00:00
2       11              2020-12-22 00:00:00
4       12              2020-12-22 00:00:00