Я хочу работать с дублирующимися строками в таблице базы данных H2 (удастся УДАЛИТЬ, УСТАНАВЛИВАЯ другое значение).
Давайте подготовим несколько примеров данных:
create table receipt( id int primary key, receipt_number varchar(52), shop_id int);
insert into receipt(id, receipt_number, shop_id) values(1,'A',1);
insert into receipt(id, receipt_number, shop_id) values(2,'A',1);
insert into receipt(id, receipt_number, shop_id) values(3,'B',1);
insert into receipt(id, receipt_number, shop_id) values(4,'A',2);
select * from receipt;
select receipt_number, shop_id, count(*) count from receipt group by (receipt_number, shop_id);
, которыеприводит нас к:
Я думал, что этого утверждения будет достаточно:
merge into receipt as t1
using ( select receipt_number, shop_id, count(*) count from receipt group by (receipt_number, shop_id) ) as t2 on t1.receipt_number = t2.receipt_number
when matched and count > 1 then delete;
, но возникает исключение:
Syntax error in SQL statement "MERGE INTO RECEIPT AS T1
USING ( SELECT RECEIPT_NUMBER, SHOP_ID, COUNT(*) COUNT FROM RECEIPT GROUP BY (RECEIPT_NUMBER, SHOP_ID) ) AS T2 ON T1[*].RECEIPT_NUMBER = T2.RECEIPT_NUMBER
WHEN MATCHED AND COUNT > 1 THEN DELETE "; expected "("; SQL statement:
merge into receipt as t1
using ( select receipt_number, shop_id, count(*) count from receipt group by (receipt_number, shop_id) ) as t2 on t1.receipt_number = t2.receipt_number
when matched and count > 1 then delete [42001-197] 42001/42001
Вы можете легко протестировать мой код:
docker run -d -p 1521:1521 -p 8082:81 oscarfonts/h2
, перейдите к http://localhost:8082/
, войдите и скопируйте и вставьте код.