Как убрать повторяющиеся строки sql
Перейти к содержимому

Как убрать повторяющиеся строки sql

  • автор:

запрос sql удалить повторяющиеся значения в колонке таблицы

В таблице в колонке resourseId могут встречаться повторяющиеся значения. Мне необходимо написать sql запрос, чтобы в колонке resourseId остались только неповторяющиеся значения(удалить дубликаты) а в оставшейся строке заменить userID на другое значение, допустим на 69. Я знаю как изменить значение userId, через UPDATE и SET. Но я не могу сообразить как удалить дубликаты из resourceId. Т.Е. после редактирования таблица должна стать такой:

resourceId userId isBool
25 69 1
36 69 0
47 69 0

Я вроде нашел подход через создание временной таблицы, копирование туда данных исходной таблицы с нужным условием, потом удаление исходной таблицы и копирование туда временной, не знаю, насколько это правильно, но реализовал оттуда только кусок с копированием во временную таблицу. (копирование туда работает неправильно, у меня копируются сначала resourceId а остальные колонки имеют значение null, потом userId а остальные колонки null, потом isBool, а остальные колонки null.) вот мой код

DROP TABLE IF EXISTS #tempTable CREATE TABLE #tempTable(resourceId INT,userId INT, isBool BIT); INSERT INTO #tempTable(resourceId) SELECT DISTINCT OriginalTableResourceId FROM ResourceBook INSERT INTO #tempTable(userId) SELECT OriginalTableUserId FROM ResourceBook INSERT INTO #tempTable(isBool) SELECT OriginalIsBool FROM ResourceBook SELECT * FROM #tempTable 

Удаление повторяющихся строк в таблице SQL

Базы Данных

Автор Hodogor На чтение 2 мин Просмотров 1.8к. Опубликовано 02.06.2022

При наличии повторяющихся строк в таблицах базы данных MS SQL Server может потребоваться удалить дубликаты записей.
Функция T-SQL Row_Number() может помочь разработчикам sql решить эту проблему sql.
Перед удалением некоторых строк в таблице базы данных SQL следует решить, какую из дубликатов строк вы сохраните. И вы должны решить, какие строки удалять.

Возможно, вы захотите сохранить первую запись, которую можно предположить, поскольку вставленная дата является самой ранней.
Или, если в таблице SQL есть столбец идентификатора, скажем, столбец Id с целым числом типа данных (int).
Можно сохранить повторяющуюся строку с наименьшим значением Id или с наибольшим значением Id.
Таким образом, SQL Row_Number позволяет разработчикам tsql ранжировать записи и строки таблицы по требуемым столбцам и полям таблицы, даже позволяет секционировать результирующий набор на основе столбцов таблицы.

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

Как удалить повторяющиеся строки в таблице MySQL?

Имеется таблица вида:
единственное поле
————————-
строка1
строка2
строка3
строка2
строка2
строка4
.
строка50998
Как с помощью php скрипта или через phpmyadmin удалить все дубликаты одним действием?
Спасибо!

  • Вопрос задан более трёх лет назад
  • 6208 просмотров

Комментировать
Решения вопроса 1

nowfine

сисадмин 30+ левел
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 2
Web-программист

Вот Вам алгоритм для простого PHP-скрипта.

1.Получить все строки без будликатов. Дубли подавить через distinct
SELECT DISTINCT(f1) FROM table1
Результат выборки запонимаем в массиве

2.Очистить таблицу
TRUNCATE table1

3.В цикле каждую запись из массива, полученного в п.1 добавляем обратно в БД. Дабы гарантированно исключить повторы, можете вместо INSERT использовать REPLACE

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX tmp(column1)

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

php

  • PHP
  • +1 ещё

Как из разных word документов собрать все таблицы (средствами PHPOffice/PHPWord) с заданным названием и сохранить в один файл?

  • 1 подписчик
  • 14 минут назад
  • 11 просмотров

Способы удаления дубликатов в SQL Server

При проектировании объектов, в частности таблиц в БД SQL Server необходимо придерживаться определенных правил: рекомендуется использовать правила нормализации БД; таблица должна иметь первичные ключи, кластерные и некластерные индексы; ограничения для обеспечения целостности данных и производительности. Но даже если следовать этим правилам, мы можем столкнуться с проблемой появления дубликатов в строках таблицы. Кроме этого, возможна ситуация получения дубликатов при импорте данных, когда мы загружаем данные as is в промежуточные таблицы, и далее требуется удалить дублирующие записи перед загрузкой в промышленные таблицы.

Рассмотрим различные способы для очистки данных от дублей. Создадим простую таблицу сотрудников и наполним её несколькими записями.

CREATE TABLE Employee ( [id] int identity(1,1), [Фамилия] nvarchar(100), [Имя] nvarchar(100), [Отчество] nvarchar(100), [Дата рождения] date, ) GO Insert into Employee ([Фамилия],[Имя],[Отчество],[Дата рождения]) values (N'Алексеев',N'Алексей',N'Алексеевич','1990-03-01'), (N'Алексеев',N'Алексей',N'Алексеевич','1990-03-01'), (N'Алексеев',N'Алексей',N'Алексеевич','1990-03-01') (N'Иванов',N'Иван',N'Иванович','1985-01-01'), (N'Иванов',N'Иван',N'Иванович','1985-01-01'), (N'Петров',N'Петр',N'Петрович','1988-02-01'),

Как мы видим, в таблице присутствуют дублирующие строки, которые необходимо удалить.

  • Удаление дубликатов с использованием агрегатных функций

C помощью условия GROUP BY мы группируем данные по определенным столбцам и используем функцию COUNT для подсчета вхождений строк в таблицу.

Например, с помощью следующего запроса, определим записи, которые присутствуют в таблице более 1 раза.

Select [Фамилия], [Имя], [Отчество], [Дата рождения], count(*) as CNT FROM NTA.dbo.Employee GROUP BY [Фамилия], [Имя], [Отчество], [Дата рождения] having count(*) > 1

Т.е. сотрудники Алексеев А.А. и Иванов И.И. присутствуют в таблице 3 и 2 раза соответственно.

Удалим дублирующие записи, оставив только строки с MIN id сотрудника.

Delete FROM NTA.dbo.Employee Where id not in ( select min(id) as MinRowID FROM NTA.dbo.Employee group by [Фамилия],[Имя],[Отчество],[Дата рождения] )

Выведем оставшиеся записи таблицы, и убедимся, что дубликаты отсутствуют.

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

  • Удаление дубликатов используя обобщенные табличные выражения (CTE)

Мы можем использовать связку обобщенных табличных выражений и функции ROW_NUMBER() для удаления дубликатов, например следующим образом:

WITH CTE ([Фамилия], [Имя], [Отчество], [Дата рождения], [Нумерация] ) AS (SELECT [Фамилия], [Имя], [Отчество], [Дата рождения], ROW_NUMBER () OVER (PARTITION BY [Фамилия], [Имя], [Отчество], [Дата рождения] ORDER BY id) AS [Нумерация] FROM NTA.dbo.Employee) DELETE FROM CTE WHERE [Нумерация] > 1

В данном запросе мы используем функцию ROW_NUMBER() с конструкцией PARTITION BY в предложении OVER для нумерации записей, и удаляем записи с пронумерованными значениями > 1, соответствующие дубликатам.

  • Удаление дубликатов с использованием инструментария SSIS пакетов.

Создадим в SQL Server Data Tools новый пакет integration Services.

Добавим в пакет элемент «OLE DB Source», откроем редактор OLE DB Source, в графе Connection Manager укажем реквизиты экземпляра СУБД и БД, и наименование исходной таблицы с данными, содержащей дубликаты.

С помощью кнопки Preview убедимся, что в исходной таблице присутствуют дубликаты.

Добавим оператор «Sort», и выделим поля, в которых присутствуют дублирующие данные.

Установим галку «Remove rows with duplicate sort values» для удаления дубликатов.

Добавим элемент «OLE DB Destination», в котором укажем целевую таблицу для записей результата очистки данных.

Запустив на исполнение реализованный SSIS пакет, мы видим, что в целевой источник загрузилось 3 строки, проверим, что отсутствуют дубликаты.

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

В данной статье мы рассмотрели различные способы удаления дубликатов записей в таблицах БД SQL Server, которые могут быть использованы в работе в зависимости от задачи и объема данных.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *