русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача. Удаление дубликатов.


Дата добавления: 2015-08-31; просмотров: 819; Нарушение авторских прав


Есть таблица KK_STUDENTS с единственным полем NAME - именами студентов.

Требуется убрать дубликаты, т.е. оставить каждое имя по 1 разу.

 

Создадим таблицу:

 

CREATE TABLE KK_STUDENTS

(

NAME varchar(50)

);

 

Заполним ее данными:

 

insert into KK_STUDENTS(NAME) values('Алексей');

insert into KK_STUDENTS(NAME) values('Сергей');

insert into KK_STUDENTS(NAME) values('Иван');

insert into KK_STUDENTS(NAME) values('Андрей');

insert into KK_STUDENTS(NAME) values('Иван');

insert into KK_STUDENTS(NAME) values('Алексей');

insert into KK_STUDENTS(NAME) values('Пётр');

insert into KK_STUDENTS(NAME) values('Алексей');

 

В каждой таблице есть системное поле ROWID, представляющее собой физический адрес строки. При апдейтах строк их ROWID не меняются. Поиск строки в большой таблице по заданному значению ROWID Oracle осуществляет очень быстро.

 

Посмотрим, какие записи вставились в таблицу:

 

select rowid, name from kk_students;

 

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

 

select name, min(rowid) from kk_students group by name;

 

Приведем delete, решающий задачу:

 

delete from kk_students

where rowid not in (select min(rowid) from kk_students group by name);

 

Если в таблице есть первичный ключ или другие уникальные ключи, то их можно использовать вместо ROWID для решения задачи удаления дубликатов.



<== предыдущая лекция | следующая лекция ==>
Типы данных Oracle, создание и модификация таблиц и вьюшек. | Написать один оператор DELETE, который оставит для каждого NAME только записи с максимальным DT, а более ранние записи удалит.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.