Сценарий: у меня немного дублированных контактов в таблице. Дубликаты идентифицированы, я могу просто удалить их, но проблема в том, что я не хочу терять данные, которые может иметь дубликат, а оригинал - нет. Какие-нибудь советы?MySQL - Дублирование устранения и сохранение ценных данных?
Образец данных:
ID Name Email School Dupe_Flag Key
1 AAA [email protected] X 1
2 AAB JKL 1
3 BBB [email protected] MNO X 2
4 BBC 2
Желаемый результат:
ID Name Email School Dupe_Flag Key
1 AAA [email protected] X 1
2 AAB [email protected] JKL 1
3 BBB [email protected] MNO X 2
4 BBC [email protected] MNO 2
Как связаны 2 записи? : Оба они имеют одинаковое значение ключа только с одним столбцом, имеющим Dupe_Flag SET, который является дублирующимся столбцом.
В приведенном выше случае ID 1 собирается быть удален, но электронная почта информация от ID 1 должен быть применен к ID 2.
Что такое данные? : У меня есть несколько сотен строк и несколько 100 дубликатов. Оператор UPDATE для каждой строки является громоздким и невозможен.
Бизнес-правила для определения того, какие данные имеют приоритет:
Если столбец из исходной/хороший запись (Dupe_Flag не установлен) не имеет никаких данных, и если соответствующая Dupe запись (имеет один и тот же ключ значение) столбец имеет данные, тогда исходный столбец записи должен быть обновлен.
Любая помощь/скрипт действительно оценена! Спасибо, ребята :)
, как мы можем видеть, какие строки вы считаете дублировать? как узнать, какие столбцы в обманах вы считаете более ценными, чем соответствующий столбец в строке, которую вы хотите сохранить? - без спецификации вы не можете автоматизировать операцию. –
Сначала вам нужно определить свои собственные бизнес-правила для определения того, какие данные имеют приоритет в случае конфликта. – Dolph
Dupe_Flag указывает, что это дубликат. Какие данные имеют приоритет? - Простой на самом деле. Если какой-либо из столбцов для оригинальной (хорошей) записи NULL, и если одни и те же столбцы не являются NULL в записи Duplicate, мы просто обновляем эти столбцы. Обновлен мой вопрос для ясности. Спасибо! – ThinkCode