Czy możesz mi pomóc z instrukcjami SQL w znajdowaniu duplikatów w wielu polach?
Na przykład w pseudo kodzie:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
i z powyższego stwierdzenia, jeśli istnieje wiele wystąpień , chciałbym wybrać każdy rekord z wyjątkiem pierwszego .
sql
sql-server
tsql
sql-server-2008
JOE SKEET
źródło
źródło
Odpowiedzi:
Aby uzyskać listę pól, dla których istnieje wiele rekordów, możesz użyć ...
Sprawdź ten link, aby uzyskać więcej informacji na temat usuwania wierszy.
http://support.microsoft.com/kb/139444
Edycja: Jak wspomnieli inni użytkownicy, przed zastosowaniem metody opisanej w powyższym linku powinno istnieć kryterium decydujące o tym, jak zdefiniować „pierwsze rzędy”. Na tej podstawie musisz użyć zamówienia według klauzuli i zapytania podrzędnego, jeśli to konieczne. Jeśli możesz opublikować przykładowe dane, to naprawdę by pomogło.
źródło
Wspominasz o „pierwszym”, więc zakładam, że masz jakieś uporządkowanie danych. Załóżmy, że twoje dane są uporządkowane według jakiegoś pola
ID
.Ten SQL powinien dać ci zduplikowane wpisy, z wyjątkiem pierwszego. Zasadniczo wybiera wszystkie wiersze, dla których istnieje inny wiersz z (a) tymi samymi polami i (b) o niższym ID. Wydajność nie będzie świetna, ale może rozwiązać Twój problem.
źródło
To zabawne rozwiązanie z SQL Server 2005, które lubię. Zakładam, że przez „dla każdego rekordu oprócz pierwszego” masz na myśli inną kolumnę „id”, której możemy użyć do zidentyfikowania, który wiersz jest „pierwszy”.
źródło
Aby zobaczyć zduplikowane wartości:
źródło
Jeśli używasz programu SQL Server 2005 lub nowszego (a znaczniki pytania wskazują SQL Server 2008), możesz użyć funkcji rankingu, aby zwrócić zduplikowane rekordy po pierwszym, jeśli użycie sprzężeń jest z jakiegoś powodu mniej pożądane lub niepraktyczne. Poniższy przykład pokazuje to w działaniu, gdzie działa również z wartościami null w badanych kolumnach.
Zauważ, że po uruchomieniu tego przykładu pierwszy rekord z każdej „grupy” jest wykluczony i że rekordy z wartościami null są obsługiwane poprawnie.
Jeśli nie masz dostępnej kolumny do porządkowania rekordów w grupie, możesz użyć kolumn podziału według jako kolumn uporządkowania według.
źródło
źródło
spróbuj tego zapytania, aby mieć liczbę osobno każdej instrukcji SELECT:
źródło