У меня есть база данных людей, у которых есть некоторые дубликаты, которые нужно очистить. У меня есть хранимая процедура, которая будет сливаться 2 человека вместе, но я не знаю, как выполнить это из цикла как-токонсолидировать повторяющиеся записи с использованием хранимой процедуры
Хотя есть куча полей и таблиц участвуют, для простоты скажем есть только одна таблица Person, которая выглядит следующим образом:
PersonID, FirstName, LastName, Organization, Email
1, Rick, Smith, Company A, [email protected]
2, Richard, Smith, Company A, [email protected]
3, Richie, Smith, Company A, [email protected]
4, Jonathan, Doe, Company X, [email protected]
5, John, Doe, Company X, [email protected]
6, Michael, Johnson, Company X, [email protected]
то, что я хотел бы сделать, это найти всех людей, которые могут быть продублированы на основании которых из них имеют те же поля равны. Например, если я хочу найти всех людей, у которых есть такое же LastName + Email + Organization, то я бы объединил первые 3 записи в один и запишу 5 в 4. У меня есть сохраненный процесс, чтобы сделать это один за другим:
exec mergePerson 2, 1
exec mergePerson 3, 1
exec mergePerson 5, 4
[править]: в этом случае полученный результат будет ниже (это упрощается: хранимая процедура заботится о интеллектуально слияния дюжины один-ко-многим таблицам в фоновом режиме, такие как человеко-заказов , контактные линзы и т. д.).
1, Rick, Smith, Company A, [email protected]
4, Jonathan, Doe, Company X, [email protected]
6, Michael, Johnson, Company X, [email protected]
но как это сделать оптом? Я думаю, мне нужно как-то сделать цикл while, но не уверен, как его настроить. Я видел несколько удачных способов удалить несколько записей в CTOs и разделах разделов stackoverflow usine, но это немного над моей головой, и я не знаю, могут ли они применяться здесь
Не имеет значения, в каком порядке слияние выполняется в том или ином источнике и цели. То есть, это будет работать тоже:
exec mergePerson 2, 3
exec mergePerson 3, 1
exec mergePerson 4, 5
Я использую SQL Server 2008 R2
Когда вы говорите о слиянии, вы имеете в виду обновление/вставку или просто фильтрацию дубликатов? –
Хороший вопрос. Слияние хранимой proc удаляет дубликаты после слияния (имеется куча связанной информации в других таблицах, таких как заказы, сделанные человеком, контактные заметки и т. Д.). В первом примере после слияния у вас будет всего 3 записи: 1, 4, 6. Этот сохраненный процесс уже написан. – user46372
ОК, позвольте мне обновить свой ответ соответственно. –