устранение повторяющихся записей

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица Employee_Master со столбцами в виде

 Emp_id, Emp_Name, Region_Code
  

Из-за сбоя загрузки данных в главной таблице были дублирующиеся записи.

Я обнаружил, что повторяющиеся записи предназначены для Region_Code=5,10 amp; 13 .

Как я могу узнать дублирующийся Emp_id для этого?

Также как я могу написать запрос для поиска дубликатов в данной таблице?

Ответ №1:

Следующее решение работает на SQL Server 2005 и более поздних версиях:

 -- Find Duplicate Rows
SELECT   
   Emp_id, 
   Emp_Name, 
   MAX(Region_Code) as Region_Code
FROM 
   Employee_Master 
GROUP BY 
   Emp_id, 
   Emp_Name
HAVING 
   COUNT(*) > 1



-- Delete Duplicate Rows
DELETE FROM 
   Employee_Master 
WHERE 
   Region_Code IN 
   ( 
       SELECT 
          MAX(Region_Code) 
       FROM 
          Employee_Master 
       GROUP BY 
          Emp_id, 
          Emp_Name
       HAVING 
          COUNT(*) > 1
  )
  

Комментарии:

1. Это сработает, только если имеется не более 2 повторяющихся строк.

2. @DIMITRY: ну и что, если у меня более 2 повторяющихся строк? потому что у меня здесь более 7 повторяющихся строк.

3. @sobsinha, @Dmitry: Я верю, что это сработает. Попробуйте, а затем сообщите мне, если это не сработает.

4. Возможно, я неправильно понял вопрос. 🙁 Я думал, что Emp_id — это PK, а дубликаты выглядят следующим образом (1, ‘Emp1’, 5), (2, ‘Emp1’, 5), (3, ‘Emp1’, 5)… Итак, мы хотим удалить 2 и 3. Но, похоже, это не так.

5. В любом случае это удалит только последнюю из записей duplicit (группу дубликатов). Я думаю, вы хотите сохранить одну строку и удалить остальные, верно? вам следует добавить другое условие или создать временную таблицу, куда вы будете вставлять все дублирующиеся записи, а затем удалять первую строку из каждой группы. Наконец, вы удалите записи, оставшиеся во временной таблице, из исходной таблицы.