|
SQL-Einzel-/Mehrtabellenabfragen entfernen doppelte Datensätze Einzelne Tabelle unterscheidbar - 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!!
|