Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 14609|Antwort: 0

[Tipps] SQL Wie man eine Tabelle abfragt, um Duplikate zu entfernen

[Link kopieren]
Veröffentlicht am 09.10.2014 11:03:04 | | |

SQL-Einzel-/Mehrtabellenabfragen entfernen doppelte Datensätze

Einzelne Tabelle unterscheidbar

  1. select distinct 字段 from 表
Code kopieren

Viele Stimmen werden gruppiert nach

Gruppe durch muss vor Bestellung by und Limit gesetzt werden, andernfalls wird ein Fehler gemeldet

************************************************************************************

1. Finden Sie die redundanten doppelten Datensätze in der Tabelle, und die doppelten Datensätze werden anhand eines einzigen Feldes (peopleId) bewertet.

Wählen Sie * aus Personen aus
wobei peopleId in (peopleId aus People Group auswählen nach peopleId mit count(peopleId) > 1)

2. Löschen Sie die redundanten doppelten Datensätze in der Tabelle, und die doppelten Datensätze werden anhand eines einzigen Feldes (peopleId) bewertet, wobei nur die Datensätze mit der kleinsten rowid übrig bleiben
Von Personen löschen
wobei peopleId in (peopleId aus People Group auswählen nach peopleId mit count(peopleId) > 1)
und rowid nicht in (wähle min(rowid) aus People Group nach peopleId mit count(peopleId )>1)

3. Finden Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle
Wähle * aus Vitae a
wobei (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq mit Count(*) > 1)

4. Lösche die redundanten doppelten Datensätze (mehrere Felder) in der Tabelle, sodass nur die Datensätze mit der kleinsten Rowid übrig bleiben
Aus Vitae A löschen
wobei (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq mit Count(*) > 1)
und rowid not in (select min(rowid) aus der vitae-gruppe durch peopleId,seq mit Count(*)>1)


5. Finden Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle und enthalten keine Einträge mit der geringsten Rowid
Wähle * aus Vitae a
wobei (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq mit Count(*) > 1)
und rowid not in (select min(rowid) aus der vitae-gruppe durch peopleId,seq mit Count(*)>1)

(zwei)
Zum Beispiel
In Tabelle A gibt es ein Feld-"Name",
Und der "Name"-Wert kann zwischen verschiedenen Datensätzen gleich sein,
Jetzt musst du nach Einträgen mit doppelten "Name"-Werten zwischen den Datensätzen in der Tabelle abfragen;
Wählen Sie Name,Count(*) aus einer Gruppe nach Name mit Count(*) > 1

Wenn das Geschlecht ebenfalls gleich ist, lautet es wie folgt:
Wählen Sie Name, Geschlecht, Anzahl (*) aus einer Gruppe nach Name, Geschlecht mit Zähl(*) > 1

(drei)
Methode 1

deklarieren @max ganzzahlige@id ganzzahlige

deklarieren Sie cur_rows Cursor lokal für ausgewähltes Hauptfeld, Count(*) aus Tabellennamengruppe nach Hauptfeld mit Count(*) >; 1

Öffne cur_rows

Hol cur_rows in @id,@max

während @@fetch_status=0

Beginnen

select @max = @max -1

Setze die Reihenanzahl @max

Aus dem Tabellennamen löschen, wobei das Primärfeld = @id

Hol cur_rows in @id,@max
Ende

Schließen cur_rows

Set Rowcount 0

Methode 2

"Duplikate Datensätze" haben zwei Bedeutungen von doppelten Datensätzen: Die eine ist ein vollständig duplizierter Datensatz, also ein Datensatz mit allen duplizierten Feldern, und der andere ist ein Datensatz mit doppelten Teilen wichtiger Felder, wie zum Beispiel das Namensfeld dupliziert ist, während andere Felder nicht unbedingt dupliziert sind oder ignoriert werden können.

1. Für die erste Art der Wiederholung ist sie relativ einfach zu lösen und zu verwenden

Unterscheiden * aus tableName auswählen

Du kannst das Ergebnisset ohne doppelte Einträge erhalten.

Wenn du doppelte Datensätze löschen musst (einen doppelten Datensatz behalten), kannst du sie wie folgt löschen.

Wähle Distinct * in #Tmp aus tableName aus

Drop-Tabellen-TabellenName

Wählen Sie * in tableName aus #Tmp
Drop Table #Tmp

Diese Duplikation entsteht aufgrund schlechter Tabellengestaltung und kann durch das Hinzufügen eindeutiger Indexspalten gelöst werden.

2. Diese Art von Duplikatproblem erfordert in der Regel, dass der erste Datensatz im doppelten Datensatz aufbewahrt wird, und die Operationsmethode ist wie folgt

Angenommen, es gibt doppelte Felder von Name und Adresse, und du brauchst ein eindeutiges Ergebnisset für diese beiden Felder

wähle identity(int,1,1) als AutoID aus, * in #Tmp aus tableName

wähle min(autoID) als AutoID in #Tmp2 aus #Tmp Gruppe nach Name, AutoID aus

Wählen Sie * aus #Tmp, wo AutoID eingespielt wird (AutoID aus #tmp2 auswählen)

Die letzte Auswahl erhält die Ergebnismenge Name und Adresse, die nicht wiederholt werden (es gibt jedoch ein zusätzliches AutoID-Feld, das beim tatsächlichen Schreiben in der Auswahlklausel geschrieben werden kann)

(4)
Abfragen werden dupliziert

Wähle * aus Tabellennamen, wo ID in (Wähle ID aus Tabellenname

Gruppe nach ID

mit Count(id) > 1

)

3. Finden Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle
Wähle * aus Vitae a
wobei (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq mit Count(*) > 1)

Das Ausführen wird Probleme verursachen, und das Schreiben und Senden von Dingen wie where (a.peopleId, a.seq) funktioniert nicht!!






Vorhergehend:SQL erstellt gespeicherte Prozeduren mit Parametern
Nächster:EPUBReader Reader, ein Muss zum Öffnen von EPUB-Dateien
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com