#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 (группу дубликатов). Я думаю, вы хотите сохранить одну строку и удалить остальные, верно? вам следует добавить другое условие или создать временную таблицу, куда вы будете вставлять все дублирующиеся записи, а затем удалять первую строку из каждой группы. Наконец, вы удалите записи, оставшиеся во временной таблице, из исходной таблицы.