Най-добрите практики за проектиране на база данни препоръчват използването на ограничението UNIQUE за предотвратяване на дублиране в база данни. Въпреки това, когато работите с лошо проектирана база данни или нечисти данни, може да се наложи сами да намерите дубликати и да ги изтриете ръчно.
Прочетете, за да научите как да намерите дубликати в SQL база данни и как да ги изтриете.
Създайте примерна база данни
За демонстрационни цели създайте таблица с име Потребители с колона с име и резултат, като изпълните тази SQL заявка.
ИЗПУСКАЙТЕТАБЛИЦААКОСЪЩЕСТВУВАПотребители;
СЪЗДАВАЙТЕТАБЛИЦАПотребители (
pk_id вътр ПЪРВИЧЕН КЛЮЧ,
име VARCHAR (16),
резултат INT,
);
Вмъкнете някои примерни стойности, като изпълните тази заявка:
ВМЪКНЕТЕINTO
Потребители (pk_id, име, резултат)
СТОЙНОСТИ
(1, "Джейн", 20),
(2, 'Джон', 13),
(3, "Алекс", 32),
(4, 'Джон', 46),
(5, "Джейн", 20),
(6, 'Дева Мария', 34),
(7, "Джейн", 20),
(8, 'Джон', 13)
Обърнете внимание, че някои от тези редове съдържат дублирани стойности за колоната за име.
Чувствайте се свободни да проверите тези SQL команди и заявки ако имате нужда от по-задълбочено обяснение как да манипулирате бази данни с помощта на SQL.
Използване на GROUP BY за намиране на дублирани стойности
Можеш използвайте оператора GROUP BY, за да подредите стойности които отговарят на определени условия в същата група.
Да кажем, че имената в примерната таблица трябва да са уникални. Можете да използвате GROUP BY, за да групирате редовете, споделящи едно и също име.
ИЗБЕРЕТЕиме, БРОЯ(име)
ОТ Потребители
ГРУПИРАНЕ ПО име
ИМАЩ БРОЯ (име) > 1
COUNT ви позволява да изберете редовете, които имат повече от един потребител с едно и също име.
Когато изпълните тази заявка, базата данни ще върне редове, съдържащи Джон и Джейн като дубликати.
Изтриване на дубликати от база данни
След като откриете дубликатите, може да искате да ги изтриете с помощта на командата DELETE.
За този пример изпълнете следната заявка:
СЪС cte КАТО (
ИЗБЕРЕТЕ *
ROW_NUMBER() НАД (
РАЗДЕЛЕНИЕ ПО
име, резултат
ПОДРЕДЕНИ ПО
име, резултат
) Р
ОТ
Потребители
)
ИЗТРИЙОТ cte
КЪДЕ R > 1;
Тази заявка използва CTE израз за намиране на дубликати и след това изтрива всички тях с изключение на един.
Защо трябва да изтриете дублиращи се данни
Изтриването на дублирани данни не е задължително. Въпреки това ви позволява да освободите пространството, което използват дублиращите се редове.
По-малко редове също означават, че заявките могат да се изпълняват много по-бързо, което води до по-висока производителност. Използвайте заявките в този урок, за да ви помогнат да намерите и премахнете дубликати от SQL база данни.