Найдите дубликаты в MS SQL Server

Опубликовано: 10 Августа, 2021

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

  • Предложение GROUP BY.
  • ROW_NUMBER () функция.

1. Использование предложения GROUP BY для поиска повторяющихся значений:

Синтаксис:

 ВЫБРАТЬ col1, col2, ... COUNT (*)
FROM table_name
ГРУППА ПО col1, col2, ...
ИМЕЕТ СЧЕТ (*)> 1;



Пример -
Давайте создадим таблицу с именем Geek, содержащую три столбца ID, A и B.

 СОЗДАТЬ ТАБЛИЦУ Компьютерщик (
ID INT IDENTITY (1, 1),
ИНТ,
B INT,
ПЕРВИЧНЫЙ КЛЮЧ (id));



Добавим несколько значений в таблицу Geek -

ВСТАВИТЬ В "Компьютерщик" (A, B)
ЗНАЧЕНИЯ (1, 1), (1, 2), (1, 3), (2, 1),
(1, 2), (1, 3), (2, 1), (2, 2);



Мы знаем, что таблица Geek содержит следующие повторяющиеся строки -

 (1, 2) (2, 1) (1, 3)


Запрос MS SQL Server для поиска повторяющихся строк с помощью предложения GROUP BY в таблице Geek:

 ВЫБЕРИТЕ A, B, COUNT (*) AS num
ОТ Компьютерщика
ГРУППА ПО А, Б
ИМЕЕТ СЧЕТ (*)> 1;

Выход -

Стол - Компьютерщик

А B число
2 1 2
1 2 2
1 3 2


Чтобы найти полную информацию о строке для каждой повторяющейся строки, СОЕДИНИТЕ вывод вышеуказанного запроса с таблицей Geek с помощью CTE:

 С КТР КАК ( 
ВЫБЕРИТЕ A, B, COUNT (*) AS num
ОТ Компьютерщика
ГРУППА ПО А, Б
ИМЕЕТ СЧЕТ (*)> 1
)
ВЫБЕРИТЕ Geek.ID, Geek.A, Geek.B
ОТ Компьютерщика
INNER JOIN CTE ON
CTE.A = Компьютерщик.A И CTE.B = Компьютерщик.B
ЗАКАЗ Geek.A, Geek.B;



Выход -

Стол - Компьютерщик

Я БЫ А B
2 1 2
5 1 2
6 1 3
3 1 3
4 2 1
7 2 1



2. Использование функции ROW_NUMBER () для поиска повторяющихся значений:

Синтаксис:

 С cte AS (
ВЫБЕРИТЕ столбец, ROW_NUMBER () ВЫШЕ (
РАЗДЕЛЕНИЕ ПО столбцам
ЗАКАЗАТЬ ПО столбцу) КАК row_num
FROM table_name
)  
ВЫБРАТЬ * 
Из cte  
ГДЕ row_num> 1;


Запрос MS SQL Server для поиска повторяющихся строк с помощью функции ROW_NUMBER () в таблице Geek:

 С КТР КАК (
ВЫБЕРИТЕ A, B,
ROW_NUMBER () ВЫШЕ (
РАЗДЕЛЕНИЕ НА A, B
ЗАКАЗ ПО А, Б
) AS rownum
ОТ Компьютерщика
)
ВЫБРАТЬ *
ОТ CTE
ГДЕ rownum> 1;

Выход -

Стол - Компьютерщик

А B Rownum
1 2 2
1 3 2
2 1 2