为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用java从mysql db的行中删除重复项

如何使用java从mysql db的行中删除重复项

跃然一笑 2021-09-29 17:50:43
我想使用 jdbc 删除表中的重复行。我只是尝试在下面的代码中删除表中的所有记录   String query="Delete from tests where product_id=20 and product_name='KINDLE001'";有什么方法可以删除重复记录并保留表中的最后一个重复值。就像表中有一个名为 S.NO 1,2,3 和 1,2 行的列是重复的,那么我只想删除记录 1。并保留 2、3 条唯一记录。
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

如何攻击表中的dup的一般方法如下。


1)定义唯一键列 - 我在我的例子中使用 KEY1, KEY2


2) 定义标识顺序的列 - 保留最高值,所有其他值都被视为dups。我用ORDER1


例子


create table tab as

select 1 key1, 1 key2, 1 order1 from dual union all  -- dup

select 1 key1, 1 key2, 2 order1 from dual union all  -- dup

select 1 key1, 1 key2, 3 order1 from dual union all

select 1 key1, 2 key2, 1 order1 from dual union all

select 2 key1, 1 key2, 1 order1 from dual union all  -- dup

select 2 key1, 1 key2, 2 order1 from dual union all

select 2 key1, 2 key2, 1 order1 from dual;

此查询标识重复的行


select KEY1, KEY2, ORDER1 from 

 (select tab.*,

   row_number()  over (partition by key1, key2 order by order1 desc) as rn

  from tab)

where rn > 1


      KEY1       KEY2     ORDER1

---------- ---------- ----------

         1          1          2 

         1          1          1 

         2          1          1

并且此查询删除重复项


delete from tab where (KEY1, KEY2, ORDER1) in

(select KEY1, KEY2, ORDER1 from 

 (select tab.*,

   row_number()  over (partition by key1, key2 order by order1 desc) as rn

  from tab)

where rn > 1)

将您的表名和列名替换为TAB,KEY1, KEY2和ORDER1。


查看完整回答
反对 回复 2021-09-29
  • 3 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信