Премахване на дублирани редове от MySQL база данни

Не ви ли се е случвало по погрешка да вкарате промишлени количества информация в дадена таблица, измежду която някои полета се дублират? Не, не съм се побъркал и не, не става въпрос за уникални записи в поле. Става въпрос за пълно съвпадение в съдържанието на две полета в два или повече различни записа.

Веднага прилагам прилагам пример. Решаваме(незнайно защо) да си правим база данни със всички квартали и градовете, в които се намират в България. Таблицата ни е с три полета: id, city, residential. Таблицата ни, най-просто може да бъде създадена така:

CREATE TABLE residentials (
id int(10) NOT NULL auto_increment,
city varchar(32),
residential varchar(32),
PRIMARY KEY (id)
);

Очевадно е, че няма как да сложим уникалност на нито едно от двете полета, поради простата причина, че квартали с името “Изток”, “Запад”, “Надежда”… има в почти всеки град. Но е лишено от всякаква логика да имаме два записа:

+----+------------+-------------+
| id |    city    | residential |
+----+------------+-------------+
| 1  | Пазарджик  |   Запад     |
| 2  | Пазарджик  |   Запад     |
+---+-------------+-------------+

Ясно е, че трябва да се лишим с единия от записите. И ако говорим за сравнително голям обем от информация и респективно сравнително голям брой дублирани записи, то вместо да убиваме отговорника за съдържанието има едно по-интелигентно решение, за което научих от неволята :D

ALTER IGNORE TABLE residentials ADD UNIQUE INDEX(city,residential);

Това ни лишава от страшно много болежки, псувни, но за жалост не и от живота на отговорника за съдържанието :D

П.П: Страшно много пъти ми е трябвало такова решение и всеки път го търся като в бездънна яма. Вече си го имам запазено :)


Leave a Reply



TopBloglog image