Как удалить дубликаты из строк из MySQL DB, используя Java - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу удалить повторяющиеся строки в таблице, используя 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 ]

0 голосов
/ 20 сентября 2018

Общий способ атаки на dups в таблице выглядит следующим образом.

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.

0 голосов
/ 13 июля 2019
private void delete_duplicatesActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    Connection connection = getConnection();
    try {
            String querydi = "DELETE t1 FROM winner_loser AS t1 ,winner_loser AS t2 where t1.date='"+getdate1.getText()+"' AND t2.date='"+getdate1.getText()+"'  AND t1.k=t2.k AND t1.sn>t2.sn  ";
            pstmt = (PreparedStatement) connection.prepareStatement(querydi);

            pstmt.executeUpdate();

            JOptionPane.showMessageDialog(null, "Delete Duplicates Successfully ! Reload again pls !");

            pstmt.close();
            connection.close();
        } catch (SQLException ex) {

        }     
}    

Приведенный выше код хорошо работает для удаления дублирующихся значений.

0 голосов
/ 20 сентября 2018

Вы можете использовать метод ниже, как указано в здесь

Select all unique rows
Copy them to a new temp table
Truncate original table
Copy temp table data to original table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...