Как удалить повторяющиеся записи в SQL?
У меня такая проблема.
В MySQL базе имеются повторяющиеся строки — смотрите на скрине 003.ee
Одна запись от другой отличается тем, что в перой откудато при импорте взялся пробел или перенос на другую строку.. ну какойто невидимый символ.
Как мне удалить все невидимые символы, а затем удалить все повторяющиеся в 1 столбике записи?
- Вопрос задан более трёх лет назад
- 587 просмотров
2 комментария
Простой 2 комментария

Влад @Sc0undRel Автор вопроса
удалить пробелы помогло
update domains set domain = replace(domain,»
«,»»)
теперь ищу как удалить дубли

Влад @Sc0undRel Автор вопроса
вот это помогло:
— create a new tmp_eployee table
CREATE TABLE tmp_employee LIKE employee;
— add a unique constraint
ALTER TABLE tmp_employee ADD UNIQUE(ssn);
— scan over the employee table to insert employee entries
INSERT IGNORE INTO tmp_employee SELECT * FROM employee ORDER BY id;
— rename tables
RENAME TABLE employee TO backup_employee, tmp_employee TO employee;
Решения вопроса 1
Недопрограммист
CREATE TABLE `table_tmp` SELECT DISTINCT * FROM `table`; DROP TABLE `table`; RENAME TABLE `table_tmp` TO `table`;
MySQL — удалить дубликаты строк
Для того чтобы можно было удалить дубликаты записей в таблице, воспользуемся однострочным SQL-запросом:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(email);
где: `table` — имя таблицы, email — имя столбца в котором ищем дубликаты!
2й вариант
В случае, если необходимо производить поиск дубликатов по 2-м столбцам.
ALTER IGNORE TABLE table1 ADD UNIQUE KEY(Name2, Name3);
3й вариант
Когда сложная ситуация, без создания копий таблиц, наверно не обойтись.
CREATE TEMPORARY TABLE tmp_tab AS SELECT DISTINCT * FROM your_table; DELETE FROM your_table; INSERT INTO your_table SELECT * FROM tmp_tab; DROP TABLE tmp_tab;
click fraud protection
Повторяющиеся значения в базе данных могут стать проблемой при выполнении высокоточных операций. Они могут привести к тому, что одно и то же значение будет обрабатываться несколько раз, что приведет к искажению результата. Повторяющиеся записи также занимают больше места, чем необходимо, что приводит к снижению производительности.
В этом руководстве вы поймете, как найти и удалить повторяющиеся строки в базе данных SQL Server.
Основы
Прежде чем мы продолжим, что такое повторяющаяся строка? Мы можем классифицировать строку как дубликат, если она содержит такое же имя и значение, что и другая строка в таблице.
Чтобы проиллюстрировать, как найти и удалить повторяющиеся строки в базе данных, давайте начнем с создания образцов данных, как показано в запросах ниже:
ИСПОЛЬЗОВАТЬ дублируетсяb;
СОЗДАЙТЕ ТАБЛИЦА пользователи (
я бы INT ЛИЧНОСТЬ ( 1 , 1 ) НЕТ НУЛЕВОЙ ,
имя пользователя ВАРЧАР ( 20 ) ,
электронное письмо ВАРЧАР ( 55 ) ,
Телефон БОЛЬШОЙ ,
состояния ВАРЧАР ( 20 )
) ;
ВСТАВЛЯТЬ В пользователи ( имя пользователя , электронное письмо
, Телефон , состояния )
ЦЕННОСТИ ( ‘нуль’ , ‘ [электронная почта защищена] ‘ , 6819693895 , ‘Нью-Йорк’ ) ,
( ‘Гр33н’ , ‘ [электронная почта защищена] ‘ , 9247563872 , ‘Колорадо’ ) ,
( ‘Оболочка’ , ‘ [электронная почта защищена] ‘ , 702465588 , ‘Техас’ ) ,
( ‘жить’ , ‘ [электронная почта защищена] ‘ , 1452745985 , ‘Нью-Мексико’ ) ,
( ‘Гр33н’ , ‘ [электронная почта защищена] ‘ , 9247563872 , ‘Колорадо’ ) ,
( ‘нуль’ , ‘ [электронная почта защищена] ‘ , 6819693895 , ‘Нью-Йорк’ ) ;
В приведенном выше примере запроса мы создаем таблицу, содержащую информацию о пользователе. В следующем блоке предложений мы используем вставку в оператор, чтобы добавить повторяющиеся значения в таблицу пользователей.
Найти повторяющиеся строки
Когда у нас будут нужные образцы данных, давайте проверим наличие повторяющихся значений в таблице пользователей. Мы можем сделать это, используя функцию подсчета, как:
ВЫБРАТЬ имя пользователя , электронное письмо , Телефон , состояния , СЧИТАТЬ ( * ) В ВИДЕ count_value ОТ пользователи ГРУППА ОТ имя пользователя , электронное письмо , Телефон , состояния НАЛИЧИЕ СЧИТАТЬ ( * ) > 1 ;
Приведенный выше фрагмент кода должен возвращать повторяющиеся строки в базе данных и количество раз, которое они появляются в таблице.
Пример вывода выглядит следующим образом:

Затем мы удаляем повторяющиеся строки.
Удалить повторяющиеся строки
Следующим шагом будет удаление повторяющихся строк. Мы можем сделать это, используя запрос на удаление, как показано в примере фрагмента ниже:
удалить из пользователей, у которых нет id (выбрать max(id) из группы пользователей по логину, электронной почте, телефону, штатам);
Запрос должен воздействовать на повторяющиеся строки и сохранять уникальные строки в таблице.
Мы можем рассматривать таблицу как:
ВЫБРАТЬ * ОТ пользователи;
Полученное значение выглядит следующим образом:

Удалить повторяющиеся строки (JOIN)
Вы также можете использовать оператор JOIN для удаления повторяющихся строк из таблицы. Пример кода запроса показан ниже:
УДАЛИТЬ а ОТ пользователи ВНУТРЕННИЙ ПРИСОЕДИНИТЬСЯ
( ВЫБРАТЬ я бы , классифицировать ( ) НАД ( раздел ОТ имя пользователя ПРИКАЗ ОТ я бы ) В ВИДЕ классифицировать_ ОТ пользователи )
б НА а . я бы = б . я бы ГДЕ б . классифицировать_ > 1 ;
Имейте в виду, что использование внутреннего соединения для удаления дубликатов может занять больше времени, чем другие, в обширной базе данных.
Удалить повторяющуюся строку (row_number())
Функция row_number() присваивает порядковый номер строкам в таблице. Мы можем использовать эту функцию для удаления дубликатов из таблицы.
Рассмотрим пример запроса ниже:
ИСПОЛЬЗОВАТЬ дублируетсяb
УДАЛИТЬ Т
ОТ
(
ВЫБРАТЬ *
, дубликат_ранга = ROW_NUMBER ( ) НАД (
ПЕРЕГОРОДКА ОТ я бы
ПРИКАЗ ОТ ( ВЫБРАТЬ НУЛЕВОЙ )
)
ОТ пользователи
) В ВИДЕ Т
ГДЕ дубликат_ранга > 1
Приведенный выше запрос должен использовать значения, возвращаемые функцией row_number(), для удаления дубликатов. Дублирующаяся строка выдаст значение выше 1 из функции row_number().
Вывод
Поддержание чистоты ваших баз данных путем удаления повторяющихся строк из таблиц — это хорошо. Это помогает улучшить производительность и объем памяти. Используя методы, описанные в этом руководстве, вы безопасно очистите свои базы данных.
Как удалять повторяющиеся записи в Oracle
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 13 человек(а).
Количество просмотров этой статьи: 12 913.
В этой статье:
Повторяющиеся строки в Oracle могут быть дифференцированы только с помощью их ‘RowId’ (адрес строки).
![]()
SQL > select rowid,name from names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 4 rows selected. SQL > delete from names where rowid='AABJnsAAGAAAdfOAAA'; 1 row deleted. SQL > commit; Commit complete. SQL > select rowid,name from names; ROWID NAME ------------------ -------------------- AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 3 rows selected.
![]()
SQL > select name from names; NAME ------------------------------ Alan Carrie Tom Alan 4 rows selected. SQL > delete from names where name='Alan'; 2 rows deleted. SQL > commit; Commit complete. SQL > insert into names values ('Alan'); 1 row created. SQL > commit; Commit complete. SQL > select * from names; NAME ------------------------------ Alan Carrie Tom rows selected.
![]()
SQL > select rowid,name from names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan 5 rows selected. SQL > delete from names a 2 where rowid > (select min(rowid) from names b 3 where b.name=a.name 4 ); 2 rows deleted. SQL > select rowid,name from names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 3 rows selected. SQL > commit; Commit complete. >> ul>li> li>Продублируйте линию 3 сверху и добавьте новое название столбца, если у вас есть несколько столбцов в таблице. Допустим, что у вас есть столбец возрастов, то команда будет следующей. br>br>[[Image:Delete Duplicate Records in Oracle Step 4.jpg|center|550px]] ul><CodeBox| source lang="oracle8"> SQL > select * from names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 4 rows selected. SQL > delete from names a 2 where rowid > (select min(rowid) from names b 3 where b.name=a.name 4 and b.age=a.age 5 ); 1 row deleted. SQL > select * from names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 rows selected. SQL > commit; Commit complete.
