что такое max (rowid) в oracle - PullRequest
0 голосов
/ 08 июня 2018

Ниже приведен запрос на удаление дублирующихся строк в SALES_DETAILS, но что такое max (rowid)?

delete SALES_DETAILS
  where rowid not in (select max(rowid)
                      from sales_details
                      group by txt_id,customer_id);

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если предположить, что (как правило) у нас есть в основном "хорошие" данные и не так много дубликатов, то их удаление может быть достигнуто, возможно, более эффективно, если перевернуть эту строку, чтобы определить, какие строки являются дубликатами.вместо не дубликатов, например

delete from SALES_DETAILS
where rowid in (
  select rid
  from (
    select rowid rid, 
           row_number() over ( partition by txt_id,customer_id order by rowid ) as r
    from SALES_DETAILS
     )
    where r > 1
  )

Здесь также есть видео, объясняющее это

https://www.youtube.com/watch?v=Y_m39BySTDU&list=PLJMaoEWvHwFIUwMrF4HLnRksF0H8DHGtt&index=19

0 голосов
/ 08 июня 2018

ROWID - псевдостолбец Oracle, который содержит адрес конкретной строки.Это позволяет базе данных находить строки.Обычно вы не видите его в структуре таблицы, но он там и остается скрытым.Это не значит, что вы не можете его использовать: -)

Ваш оператор DELETE удаляет каждую строку из таблицы SALES_DETAILS , которая является дубликатом на основе пары txt_id, customer_id, простокак вы упомянули.Так что это означает, что он удаляет дубликаты, но сохраняет строку с самым высоким значением rowid в группе.

Пожалуйста, найдите это в документации для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...