Łatwo jest znaleźć duplikaty za pomocą jednego pola:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Więc jeśli mamy stolik
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
To zapytanie da nam Johna, Sama, Toma, Toma, ponieważ wszyscy mają to samo email
.
Jednak chcę uzyskać duplikaty z tym samym email
i name
.
To znaczy, chcę dostać „Tom”, „Tom”.
Powód, dla którego go potrzebuję: popełniłem błąd i pozwoliłem wstawić duplikat name
i email
wartości. Teraz muszę usunąć / zmienić duplikaty, więc najpierw muszę je znaleźć .
sql
duplicates
Alex
źródło
źródło
name
pola w SELECT.Odpowiedzi:
Po prostu zgrupuj obie kolumny.
Uwaga: starszy standard ANSI ma mieć wszystkie niezagregowane kolumny w GROUP BY, ale zmieniło się to wraz z ideą „zależności funkcjonalnej” :
Wsparcie nie jest spójne:
sql_mode=only_full_group_by
:źródło
>1
=1
Spróbuj tego:
WYNIK:
jeśli chcesz mieć identyfikatory duplikatów, użyj tego:
WYNIK:
aby usunąć duplikaty, spróbuj:
WYNIK:
źródło
Spróbuj tego:
źródło
Jeśli chcesz usunąć duplikaty, oto o wiele prostszy sposób, aby to zrobić, niż znajdowanie parzystych / nieparzystych wierszy w potrójnym podselekcji:
I tak, aby usunąć:
Znacznie łatwiejsze do odczytania i zrozumienia IMHO
Uwaga: Jedynym problemem jest to, że musisz wykonać żądanie, dopóki nie zostaną usunięte wiersze, ponieważ za każdym razem usuwasz tylko 1 każdego duplikatu
źródło
You can't specify target table 'users' for update in FROM clause
Spróbuj wykonać następujące czynności:
źródło
źródło
Trochę późno na imprezę, ale znalazłem naprawdę fajne obejście, aby znaleźć wszystkie duplikaty identyfikatorów:
źródło
GROUP_CONCAT
zatrzyma się po określonej z góry długości, więc możesz nie dostać wszystkichid
.wypróbuj ten kod
źródło
To wybiera / usuwa wszystkie zduplikowane rekordy, z wyjątkiem jednego rekordu z każdej grupy duplikatów. Usunięcie pozostawia wszystkie unikalne rekordy + jeden rekord z każdej grupy duplikatów.
Wybierz duplikaty:
Usuń duplikaty:
Należy pamiętać o większej liczbie rekordów, może to powodować problemy z wydajnością.
źródło
W przypadku pracy z Oracle preferowany jest ten sposób:
źródło
źródło
Jeśli chcesz sprawdzić, czy w tabeli są zduplikowane wiersze, użyłem poniższego zapytania:
źródło
To jest prosta rzecz, którą wymyśliłem. Używa wspólnego wyrażenia tabelowego (CTE) i okna partycji (myślę, że te funkcje są w SQL 2008 i późniejszych wersjach).
W tym przykładzie wszyscy uczniowie mają zduplikowane imię i nazwisko. Pola, które chcesz sprawdzić pod kątem duplikacji, znajdują się w klauzuli OVER. Możesz dołączyć dowolne inne pola do rzutu.
źródło
źródło
Jak możemy policzyć zduplikowane wartości? powtarza się 2 razy lub więcej niż 2. po prostu je policz, a nie grupowo.
tak prosty jak
źródło
Korzystając z CTE, możemy również znaleźć taką duplikat wartości
źródło
źródło
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Myślę, że to zadziała poprawnie, aby wyszukać powtarzające się wartości w określonej kolumnie.
źródło
źródło
To powinno również działać, może spróbować.
Szczególnie dobrze w twoim przypadku, gdy szukasz duplikatów, które mają jakiś prefiks lub ogólną zmianę, np. Nowa domena w poczcie. wtedy możesz użyć replace () w tych kolumnach
źródło
Jeśli chcesz znaleźć zduplikowane dane (według jednego lub kilku kryteriów) i wybierz rzeczywiste wiersze.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
źródło
źródło
COUNT
bezGROUP BY
, chyba że odnosi się to do całego stołu.Aby usunąć rekordy, których nazwy są zduplikowane
źródło
Aby sprawdzić ze zduplikowanego rekordu w tabeli.
lub
Aby usunąć duplikat rekordu z tabeli.
lub
źródło
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
źródło
Możemy skorzystać z posiadania tutaj, które działają na funkcje agregujące, jak pokazano poniżej
Tutaj jako dwa pola id_account i dane są używane z Count (*). Daje to wszystkie rekordy, które mają więcej niż jeden raz te same wartości w obu kolumnach.
Z jakiegoś powodu omyłkowo pominęliśmy dodanie jakichkolwiek ograniczeń w tabeli serwera SQL, a rekordy zostały wstawione zduplikowane we wszystkich kolumnach z aplikacją front-end. Następnie możemy użyć poniższego zapytania, aby usunąć zduplikowane zapytanie z tabeli.
Tutaj pobraliśmy wszystkie odrębne rekordy oryginalnej tabeli i usunęliśmy rekordy oryginalnej tabeli. Ponownie wstawiliśmy wszystkie odrębne wartości z nowej tabeli do oryginalnej tabeli, a następnie usunęliśmy nową tabelę.
źródło
Możesz spróbować tego
źródło
Najważniejsze jest tutaj, aby mieć najszybszą funkcję. Należy również zidentyfikować wskaźniki duplikatów. Samozłączenie jest dobrą opcją, ale aby mieć szybszą funkcję, lepiej najpierw znaleźć wiersze, które mają duplikaty, a następnie połączyć z oryginalną tabelą, aby znaleźć identyfikator zduplikowanych wierszy. Na koniec uporządkuj według dowolnej kolumny oprócz id, aby mieć zduplikowane wiersze blisko siebie.
źródło
Możesz użyć słowa kluczowego SELECT DISTINCT, aby pozbyć się duplikatów. Możesz także filtrować według nazwy i umieszczać wszystkich z tą nazwą na stole.
źródło
Dokładny kod różni się w zależności od tego, czy chcesz znaleźć zduplikowane wiersze, czy tylko różne identyfikatory o tym samym adresie e-mail i nazwie. Jeśli identyfikator jest kluczem podstawowym lub w inny sposób ma unikalne ograniczenie, to rozróżnienie nie istnieje, ale pytanie tego nie określa. W pierwszym przypadku możesz użyć kodu podanego w kilku innych odpowiedziach:
W tym drugim przypadku użyłbyś:
źródło