Найдите дубликаты в MS SQL Server
Мы могли бы использовать следующие методы для поиска повторяющихся значений в таблице.
- Предложение 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 |