Also möchte ich so etwas wie diesen SQL-Code unten machen:
select s.id, s.name,s.city
from stuff s
group by s.name having count(where city and name are identical) > 1
Um Folgendes zu erzeugen (aber ignorieren Sie, wo nur Name oder nur Stadt übereinstimmen, muss es in beiden Spalten stehen):
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
quelle
quelle
name
odercity
enthaltennull
, sie in der äußeren Abfrage nicht gemeldet werden, in der inneren Abfrage jedoch übereinstimmen.null
(es sei denn, ich vermisse etwas), müssen Sie es in einCROSS JOIN
(vollständiges kartesisches Produkt) ändern und dann eineWHERE
Klausel hinzufügen wie: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))
quelle
So etwas reicht aus. Sie wissen nichts über die Leistung, machen Sie also einige Tests.
quelle
Die Verwendung
count(*) over(partition by...)
bietet eine einfache und effiziente Möglichkeit, unerwünschte Wiederholungen zu lokalisieren und alle betroffenen Zeilen und gewünschten Spalten aufzulisten:Während die neuesten RDBMS-Versionen
count(*) over(partition by...)
MySQL V 8.0 unterstützen , wurden "Fensterfunktionen" eingeführt (siehe unten) (in MySQL 8.0).db <> hier fummeln
quelle
Ein bisschen spät zum Spiel in diesem Beitrag, aber ich fand diesen Weg ziemlich flexibel / effizient
quelle
Du musst dich selbst anschließen und Name und Stadt zusammenbringen. Dann nach Anzahl gruppieren.
quelle
Bei einer Staging-Tabelle mit 70 Spalten und nur 4 Spalten, die Duplikate darstellen, gibt dieser Code die fehlerhaften Spalten zurück:
.
quelle