Мне нужно удалить повторяющиеся записи для определенного поля (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
)
Но при использовании базы данных H2 или hsqldb этот запрос не может быть выполнен, что указывает на синтаксическую ошибку.
Есть ли способ выполнить удаление дубликатов, аналогичное приведенному выше запросу, но так, чтобы это можно было сделать в базе данных h2 или hsqldb?
Такой простой запрос должен помочь:
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, instrument_id, modification_time) values(2,11, CURRENT_DATE);
insert into instrument_bit_detail(id, instrument_id, modification_time) values(3,10, CURRENT_DATE);
insert into instrument_bit_detail(id, instrument_id, modification_time) values(4,12, CURRENT_DATE);
insert into instrument_bit_detail(id, instrument_id, modification_time) values(5,11, CURRENT_DATE);
insert into instrument_bit_detail(id, instrument_id, modification_time) values(6,10, CURRENT_DATE);
insert into instrument_bit_detail(id, instrument_id, modification_time) values(7,12, 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