Поиск дублированных записей в SQL на основе комбинации полей - PullRequest
1 голос
/ 16 марта 2009

У меня есть проект, в котором значительный кусок пирога будет определять, где в базе данных дублируется запись (Sql Server 2005). Я знаю очевидные способы найти дубликат записи. Однако в этом случае мы хотим быть достаточно умными в этом процессе. Таблицы будут содержать информацию о потенциальном клиенте (потенциальном клиенте). Начальные таблицы будут принимать все лиды. Затем мы пройдем процесс дублирования, который проверит, является ли отряд дубликатом, сопоставив несколько полей. Например, мы можем захотеть сопоставить фамилию, имя, адрес электронной почты и почтовый индекс. Это всего лишь пример, но по сути мы хотим создать ключ, используя различные поля, чтобы узнать, существует ли этот человек. Записи, которые не являются дуплексами, попадут в финальную таблицу.

Я бы хотел использовать для этого SSIS, но не уверен, что для этого лучше всего использовать SSIS. Может ли кто-нибудь направить меня в правильном направлении или предоставить ссылку на пример, в котором SSIS используется для борьбы с обманщиками путем проверки комбинации полей?

Ответы [ 3 ]

2 голосов
/ 17 марта 2009

Мне кажется, вы пытаетесь перехитрить своих пользователей, пытаясь угадать их. К сожалению, это почти всегда не работает, так как у вас действительно могут быть два клиента с одинаковыми именами, но с разными почтовыми индексами или другими подобными примерами.

Лучше всего «предложить», что клиент, которого он собирается сохранить, уже существует (и показать ему дубликат), но разрешить ему сохранить в любом случае. Поэтому процесс должен выглядеть примерно так:

  1. Пользователь вводит информацию и нажимает Сохранить
  2. Система обнаруживает потенциальный дубликат, используя критерии, и предлагает пользователю
  3. Пользователь отменит или подтвердит, после чего вы предпримете соответствующее действие

Если потенциальных дубликатов нет, шаги 2-3 можно безопасно пропустить.

1 голос
/ 16 марта 2009
-- List all Duplicates
select m1.lastname, m1.firstname, m1.email, m1.zipcode
from tblMain m1
inner join tblMain m2
on isnull(m1.lastname, '') = isnull(m2.lastname, '')
and isnull(m1.firstname, '') = isnull(m2.firstname, '')
and isnull(m1.email, '') = isnull(m2.email, '')
and isnull(m1.zipcode, '') = isnull(m2.zipcode)
and m1.ID <> m2.ID
order by 1, 2, 3, 4

Чтобы удалить последние дубликаты, используйте что-то вроде:

delete from tblMain
where ID in 
(
    select m1.ID
    from tblMain m1
    inner join tblMain m2
    on isnull(m1.lastname, '') = isnull(m2.lastname, '')
    and isnull(m1.firstname, '') = isnull(m2.firstname, '')
    and isnull(m1.email, '') = isnull(m2.email, '')
    and isnull(m1.zipcode, '') = isnull(m2.zipcode)
    and m1.ID > m2.ID
)
0 голосов
/ 16 марта 2009

Я не понимаю, как вы можете быть уверены, что SSIS - это решение вашей проблемы. Почему вы не можете просто создать уникальные ключи в своей «финальной» таблице, чтобы убедиться, что вы не добавляете дубликаты? Возможно, вам лучше объяснить свою проблему ...

...