запрос 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
сисадмин 30+ левел
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 2
Web-программист
Вот Вам алгоритм для простого PHP-скрипта.
1.Получить все строки без будликатов. Дубли подавить через distinct
SELECT DISTINCT(f1) FROM table1
Результат выборки запонимаем в массиве
2.Очистить таблицу
TRUNCATE table1
3.В цикле каждую запись из массива, полученного в п.1 добавляем обратно в БД. Дабы гарантированно исключить повторы, можете вместо INSERT использовать REPLACE
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Immortal_pony @Immortal_pony Куратор тега PHP
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX tmp(column1)
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- 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, которые могут быть использованы в работе в зависимости от задачи и объема данных.
При больших объемах дубликатов в данных целесообразно рассмотреть возможность сохранения уникальных значений в промежуточную таблицу, очистку рабочей таблицы, и возврат оставленных уникальных записей.