Нехитрые советы для пользователей ПК

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

Чтобы подготовить список только неповторяющихся записей, можно воспользоваться модификатором Distinct —  Select distinct tovar from Tovary:

qry11-7375499

Следующий текст запроса

Select id, Tovar from Tovary where Tovar in (

Select Tovar from Tovary Group by Tovar having Count(*) >1)

поможет вывести ‘локализацию’ записей-дубликатов по уникальному полю id в исходной табличке:

qry8-3693934

А теперь  решение, пожалуй, самого главного вопроса — Как удалить из базы повторяющиеся записи-двойники, оставив лишь по одной уникальной. Для случая нашего примера, где в табличке есть уникальное поле id, такую задачку можно решить следующим нехитрым запросом:

Delete from t from tovary t, tovary v

where t.tovar = v.tovar

and t.id > v.id

qry9-1209444

Прим. Для выполнения вышеприведенного запроса в таблице нужно иметь столбец с уникальным id. Если такового нет — придется каким-то образом создавать его. Как это можно сделать — смотрите в следующем Совете 28.

В результате получим лекарство от головной боли — двоящиеся товары (в случае нашего примера) будут удалены! :

qry12-4823984

Другим вариантом запроса на удаление записей-дубликатов может быть следующая конструкция с использованием функции row_number():

WITH DeleteDouble

AS (

SELECT tovar, row_number() OVER (PARTITION BY tovar ORDER BY tovar) rn

FROM Tovary

)

DELETE

FROM DeleteDouble

WHERE rn > 1

numrec7-2411490

В этом случае даже нет необходимости создавать дополнительное поле id с уникальным ключом.

Пока об удалении повторов строк всё. Удачи и отсутствия мусора в ваших базах данных!

Еще несколько полезных советов для пользователей о работе с MS SQL Server  можно посмотреть здесь

© Simashkov.2014

25.10.2014 г.

Назад