2016-03-22 3 views
0

Я хочу, чтобы проверить, есть ли дубликаты в моей таблице ParticipantsDebtor, дублирование сравнивается имя, ParticipantsCode и DateOfBirth поле Name и ParticipantsCode находится в ParticipantsDebtor таблице и DateOfBirth в ParticipantDebtorDetail таблице, моя просьба превращается в аннулированию я не знаю, если это верно, но очень долго, или она ложнаПоиск дубликатов строк

Таблица ParticipantsDebtor имеет:

  • DebtorId
  • Имя
  • ParticipantsCode

Таблица ParticipantDebtorDetail имеет:

  • DebtorId
  • DateOfBirth

Запрос:

SELECT a.ParticipantCode, 
     a.Name, 
     COUNT(a.DebtorId) AS DuplicateNumber, 
     b.DateOfBirth 
FROM ParticipantDebtors a WITH (NOLOCK), 
    crem.ParticipantDebtorDetail b WITH (NOLOCK) 
WHERE a.DebtorId <> b.DebtorId 
GROUP BY a.ParticipantCode, 
     a.Name, 
     b.DateOfBirth 
HAVING COUNT(a.DebtorId) > 1 

ответ

1

Неправильно. Вам нужны join ключей. , , Простое правило: Никогда запятые запятые в разделе FROM. Всегда использование явного JOIN Синтаксис:

SELECT d.ParticipantCode, d.Name, dd.DateOfBirth, COUNT(*) as NumDups 
FROM ParticipantDebtors d with(nolock) JOIN 
    crem.ParticipantDebtorDetail dd with(nolock) 
    ON d.DebtorId = dd.DebtorId 
GROUP BY d.ParticipantCode, d.Name, dd.DateOfBirth 
HAVING COUNT(*) > 1; 

Если один должник может оказаться в любой таблице больше, чем один раз, то вы можете заменить условие HAVING и расчет NumDups с:

HAVING COUNT(DISTINCT d.DebtorID) > 1 
+0

я неправильно результат, NumDups всегда между 2 и 3, это неправильно в моей таблице, почему? – khadi8

+0

@ khadi8. , , Я не могу ответить на это без дополнительной информации. Можете ли вы настроить SQL Fiddle с образцами данных, которые показывают проблему. –

Смежные вопросы