Всем привет. Знаю, что тема заезженная, но решить поставленную задачу не смог.
Суть в чем:
Имеется таблица с перечнем фруктов/овощей которая имеет 4 поля (ID, Name, List, Quantity).
Name заносится название фрукта/овоща.List состояние фрукта (зеленый, спелый, переспелый...)Quantity количество фрукта/овоща в наличииТак, как у нас состояний несколько, поле Name может повторяться:
Таблица №1
+--------+---------+-----------+----------+
| id | Name | List | Quantity |
+--------+---------+-----------+----------+
| 1 | Яблоко | Зеленый | 100 |
+--------+---------+-----------+----------+
| 2 | Яблоко | Спелый | 40 |
+--------+---------+-----------+----------+
| 3 | Яблоко | Переспелый| 3 |
+--------+---------+-----------+----------+
Все было хорошо, но в один прекрасный день, что-то пошло не так, часть полей продублировались и получилось:
Таблица №2
+--------+---------+-----------+----------+
| id | Name | List | Quantity |
+--------+---------+-----------+----------+
| 1 | Яблоко | Зеленый | 100 |
+--------+---------+-----------+----------+
| 2 | Яблоко | Спелый | 40 |
+--------+---------+-----------+----------+
| 3 | Яблоко | Переспелый| 3 |
+--------+---------+-----------+----------+
| 4 | Яблоко | Зеленый | 100 |
+--------+---------+-----------+----------+
| 5 | Яблоко | Спелый | 40 |
+--------+---------+-----------+----------+
| 6 | Яблоко | Переспелый| 3 |
+--------+---------+-----------+----------+
| 7 | Яблоко | Зеленый | 100 |
+--------+---------+-----------+----------+
| 8 | Яблоко | Спелый | 40 |
+--------+---------+-----------+----------+
| 9 | Яблоко | Переспелый| 3 |
+--------+---------+-----------+----------+
Из за того, что поле Name не уникально, БД позволила создать дубликаты.
Теперь собственно вопрос, каким образом можно удалить задублированные поля List и Quantity, что бы получилось как в Таблице №1 ?
Для начала удалите дубли в таблице:
DELETE t1
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t1.Name = t2.Name
AND t1.List = t2.List
AND t1.Quantity = t2.Quantity
AND t1.id > t2.id;
tbl — имя вашей таблицы.
Во избежание таких ситуаций, сделайте составной уникальный индекс по полям Name, List, Quantity:
CREATE UNIQUE INDEX index_name ON tbl (Name, List, Quantity);
index_name название индекса, а tbl ваша таблица.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости