Więc chcę zrobić coś takiego jak ten kod sql poniżej:
select s.id, s.name,s.city
from stuff s
group by s.name having count(where city and name are identical) > 1
Aby otrzymać następujące dane (ale zignoruj, jeśli pasuje tylko nazwa lub tylko miasto, musi znajdować się w obu kolumnach):
id name city
904834 jim London
904835 jim London
90145 Fred Paris
90132 Fred Paris
90133 Fred Paris
sql
sql-server
sql-server-2008
duplicates
NimChimpsky
źródło
źródło
name
lubcity
zawieraćnull
, wtedy nie należy zgłaszać w zapytaniu zewnętrznym, ale będą dopasowane do zapytania wewnętrznej.null
to (chyba że czegoś mi brakuje), należy zmienić to naCROSS JOIN
(pełny iloczyn kartezjański), a następnie dodaćWHERE
klauzulę taką jak:WHERE ((s.name = t.name) OR (s.name is null and t.name is null)) AND ((s.city = t.city) OR (s.city is null and t.city is null))
źródło
Coś takiego wystarczy. Nie wiem o wydajności, więc zrób kilka testów.
źródło
Użycie
count(*) over(partition by...)
zapewnia prosty i skuteczny sposób znajdowania niechcianych powtórzeń, a także wyświetla listę wszystkich dotkniętych wierszy i wszystkich żądanych kolumn:Podczas gdy najnowsze wersje RDBMS obsługują
count(*) over(partition by...)
MySQL V 8.0 wprowadzono „funkcje okna”, jak widać poniżej (w MySQL 8.0)db <> skrzypce tutaj
źródło
Trochę późno do gry w tym poście, ale uznałem ten sposób za dość elastyczny / wydajny
źródło
Musisz dołączyć do rzeczy i dopasować nazwę i miasto. Następnie grupuj według liczby.
źródło
Biorąc pod uwagę tabelę pomostową z 70 kolumnami i tylko 4 reprezentującymi duplikaty, ten kod zwróci niewłaściwe kolumny:
.
źródło