Database
 sql >> Baza danych >  >> RDS >> Database

Jak znaleźć zduplikowane wiersze w SQL?

Problem:

Twoja tabela zawiera zduplikowane wiersze, a unikalne są tylko identyfikatory. Jak znaleźć te zduplikowane wpisy?

Przykład:

Nasza baza danych zawiera tabelę o nazwie product z danymi w następujących kolumnach:id , name i category .

id imię kategoria
1 stek mięso
2 ciasto słodycze
3 d>stek mięso
4 wieprzowina mięso
5 ciasto słodycze
6 ciasto słodycze

Znajdźmy zduplikowane nazwy i kategorie produktów. Duplikaty można znaleźć, grupując wiersze za pomocą COUNT funkcja agregująca i określenie HAVING klauzula, za pomocą której filtrować wiersze.

Rozwiązanie:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

To zapytanie zwraca tylko zduplikowane rekordy — te, które mają tę samą nazwę produktu i kategorię:

nazwa kategoria
stek mięso
ciasto słodycze

W naszej tabeli znajdują się dwa duplikaty produktów:stek z kategorii mięso i ciasto z kategorii słodycze. Pierwszy produkt jest powtarzany w tabeli dwa razy, a drugi pojawia się trzy razy.

Dyskusja:

Aby wybrać zduplikowane wartości, musisz utworzyć grupy wierszy o tych samych wartościach, a następnie wybrać grupy o liczbie większej niż jeden. Możesz to osiągnąć, używając GROUP BY i HAVING klauzula.

Pierwszym krokiem jest utworzenie grup rekordów z tymi samymi wartościami we wszystkich kolumnach niebędących identyfikatorami (w naszym przykładzie name i category ). Robisz to za pomocą GROUP BY klauzula. Po GROUP BY słowo kluczowe, umieszczasz nazwy kolumn, których chcesz użyć do grupowania. Wykluczamy id kolumna, ponieważ jest to klucz podstawowy naszej tabeli; z definicji każdy wiersz będzie miał inną wartość w tej kolumnie. Gdybyśmy go uwzględnili, nie bylibyśmy w stanie wykryć duplikatów!

Chcemy znaleźć grupy z więcej niż jednym wierszem; takie grupy muszą z definicji zawierać duplikat, o ile pogrupowaliśmy według właściwych kolumn. Aby to zrobić, używamy HAVING klauzula. Warunkiem, który określamy, jest liczba elementów w grupie — COUNT(id) — musi być większe niż jeden:COUNT(id) > 1 . Pamiętaj, że HAVING umożliwia filtrowanie grup; WHERE służy do filtrowania poszczególnych wierszy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy popełniasz te błędy podczas korzystania z SQL CURSOR?

  2. Jednym ze sposobów na uzyskanie indeksu wyszukiwania wiodącego %wildcard

  3. Przegląd funkcji DBCC CheckDB

  4. Co to jest baza danych szeregów czasowych?

  5. Instrukcja SQL SELECT