В этом руководстве вы узнаете, как удалить дубликаты строк из таблицы в SQL Server.
Чтобы удалить дубликаты строк из таблицы в SQL Server, выполните следующие действия:
- Найдите повторяющиеся строки с помощью предложения GROUP BY или функции ROW_NUMBER().
- Используйте оператор DELETE для удаления дубликатов строк.
Давайте создадим пример таблицы для демонстрации.
Создание таблицы образцов
Сначала создайте новую таблицу с именем sales.contacts следующим образом:
DROP TABLE IF EXISTS sales.contacts; CREATE TABLE sales.contacts( contact_id INT IDENTITY(1,1) PRIMARY KEY, first_name NVARCHAR(100) NOT NULL, last_name NVARCHAR(100) NOT NULL, email NVARCHAR(255) NOT NULL, );
Во-вторых, вставьте несколько строк в таблицу sales.contacts:
INSERT INTO sales.contacts (first_name,last_name,email) VALUES ('Syed','Abbas',' [email protected] '), ('Catherine','Abel',' [email protected] '), ('Kim','Abercrombie',' [email protected] '), ('Kim','Abercrombie',' [email protected] '), ('Kim','Abercrombie',' [email protected] '), ('Hazem','Abolrous',' [email protected] '), ('Hazem','Abolrous',' [email protected] '), ('Humberto','Acevedo',' [email protected] '), ('Humberto','Acevedo',' [email protected] '), ('Pilar','Ackerman',' [email protected] ');
В-третьих, запросите данные из таблицы sales.contacts:
SELECT contact_id, first_name, last_name, email FROM sales.contacts;
На следующем рисунке показан результат запроса:
Имеется много повторяющихся строк(3,4,5),(6,7) и(8,9) для контактов с одинаковыми именем, фамилией и адресом электронной почты.
Пример удаления дубликатов строк из таблицы
Следующий оператор использует общее табличное выражение( CTE ) для удаления дубликатов строк:
WITH cte AS( SELECT contact_id, first_name, last_name, email, ROW_NUMBER() OVER( PARTITION BY first_name, last_name, email ORDER BY first_name, last_name, email ) row_num FROM sales.contacts ) DELETE FROM cte WHERE row_num > 1;
В этом заявлении:
- Во-первых, CTE использует функцию ROW_NUMBER() для поиска дубликатов строк, указанных значениями в столбцах first_name, last_name и email.
- Затем оператор DELETE удаляет все дублирующиеся строки, но сохраняет только одно вхождение каждой дублирующей группы.
SQL Server выдал следующее сообщение, указывающее, что дубликаты строк были удалены.
(4 rows affected)
Если вы снова запросите данные из таблицы sales.contacts, вы обнаружите, что все дублирующиеся строки удалены.
SELECT contact_id, first_name, last_name, email FROM sales.contacts ORDER BY first_name, last_name, email;
В этом уроке вы узнали, как удалять дубликаты строк из таблицы в SQL Server.