sql> delete from emp where rowid not in (select max(rowid) from emp group by empno);
Может ли кто-нибудь объяснить, что делает max (rowid)? Пожалуйста, объясните эту программу sqlУдаление повторяющегося ряда из таблицы
sql> delete from emp where rowid not in (select max(rowid) from emp group by empno);
Может ли кто-нибудь объяснить, что делает max (rowid)? Пожалуйста, объясните эту программу sqlУдаление повторяющегося ряда из таблицы
rowid
- псевдо-столбец, доступный для всех строк в таблицах Oracle. Это действительно адрес строки, идентифицирующий страницу данных и смещение на странице данных.
Как и в случае с любым другим типом данных, вы можете взять максимальное значение. Итак, что это такое, вычисляем максимум rowid
для каждого empno
. Затем delete
удаляет все строки, которые являются , а не одним из максимумов.
Это приводит к сохранению одной строки для каждого empno
.
rowid
сам вполне хорошо documented.
Возможно, вы захотите сделать «группу за» со всеми столбцами и «count (1)» и добавить «на нем» (1)> 1 », чтобы вы обнаружили дубликаты. После этого вы можете разместить инструкцию для удаления перенастроенных четных или нечетных ронтумов. –