1. Ich bin während des Interviews auf ein Problem gestoßen, das darin bestand, eine Tabelle mit zwei Feldern zu schreiben, ID und Name, und alle Daten mit wiederholten Namen abzufragen:
SELECT * from xi a where (a.username) in (SELECT username from xi group by username having count(*) > 1)
2. Nach der Abfrage und Gruppierung aller Daten werden die Abfragedaten und die Anzahl der Wiederholungen der doppelten Daten unten aufgeführt:
SELECT count(username) as '重复次数',username from xi group by username having count(*)>1 order by username desc
3. Um die Ergebnisse anderer Personen anzuzeigen, werden die Abfragedaten unten aufgeführt : Umfassende Methode zum Abfragen und Löschen doppelter Datensätze
1. Doppelte Datensätze werden anhand eines einzelnen Felds (peopleId) beurteilt
SELECT * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
Überflüssiges Duplikat löschen Datensätze in der Tabelle. Es wird anhand eines einzelnen Felds (peopleId) beurteilt, wobei nur der Datensatz mit der kleinsten Zeilen-ID übrig bleibt.
DELETE from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
Darüber hinaus wird bei Verwendung des oben genannten SQL in MySQL ein Fehler gemeldet: Sie können die Zieltabelle „XXX“ für die Aktualisierung nicht in der FROM-Klausel angeben. Sie können nicht dieselbe Tabelle abfragen, während Sie die Tabelle ändern. Daher können Sie das Abfrageergebnis als temporäre Tabelle als Bedingung für die Änderung der Tabellendaten wie die folgende Anweisung bezeichnen um den oben genannten Fehler zu vermeiden.
DELETE from user where user_id in( (SELECT user_id from (SELECT c.* from cab_user c where c.extra_id in (SELECT a.extra_id from user a group by a.extra_id having count(a.extra_id) > 1) and c.user_id not in (SELECT min(b.user_id) from user b group by b.extra_id having count(b.extra_id )>1) ) d ) )
3. Suchen Sie nach redundanten doppelten Datensätzen (mehrere Felder) in der Tabelle
SELECT * from vitae a where (a.peopleId,a.seq) in (SELECT peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4. Löschen Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle und lassen Sie nur den Datensatz übrig die kleinste Zeilen-ID
delete from vitae a where (a.peopleId,a.seq) in (SELECT peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5. Die redundanten doppelten Datensätze (mehrere Felder) in der Nachschlagetabelle enthalten nicht den Datensatz mit der kleinsten Zeilen-ID
SELECT * from vitae a where (a.peopleId,a.seq) in (SELECT peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
(2)
Angenommen,
gibt es ein Feld „Name“ in Tabelle A,
und der „Name“-Wert zwischen verschiedenen Datensätzen kann derselbe sein,
jetzt müssen wir den Unterschied zwischen den Datensätzen in der Tabelle abfragen , es gibt doppelte Elemente im Wert „name“;
SELECT Name,Count(*) From A Group By Name Having Count(*) > 1
Wenn auch das Geschlecht gleich ist, ist das Ergebnis wie folgt:
SELECT Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
(3)
Methode 1 deklariere @max integer ,@id integerdeclare cur_rows Cursor lokal für das ausgewählte Hauptfeld, count(*) aus der Tabellennamengruppe nach Hauptfeld mit count(*) >; 1open cur_rowsfetch cur_rows into @id,@maxwhile @@fetch_status= 0beginselect @max = @max -1set rowcount @maxdelete from table name where main field = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0
Methode 2 „Doppelte Datensätze“ hat zwei Bedeutungen von doppelten Datensätzen, eine Datensätze, in denen alle Felder wiederholt werden, und zweitens Datensätze, in denen einige Schlüsselfelder wiederholt werden, z. B. das Feld „Name“, während andere Felder möglicherweise nicht wiederholt werden oder ignoriert werden können.
1. Für die erste Art der Duplizierung ist es einfacher, sie zu lösen. Verwenden Sie „select unique * from tableName“, um eine Ergebnismenge ohne doppelte Datensätze zu erhalten. Wenn die Tabelle doppelte Datensätze löschen muss (wobei 1 doppelter Datensatz erhalten bleibt), können Sie sie wie folgt löschen: Wählen Sie „distinct *“ in „#Tmp“ aus „tableNamedrop table“ aus Das Design ist nicht korrekt. Es tritt innerhalb von Wochen auf und kann durch Hinzufügen einer eindeutigen Indexspalte behoben werden.
2. Diese Art von Duplizierungsproblem erfordert normalerweise die Beibehaltung des ersten Datensatzes unter den doppelten Datensätzen. Die Vorgehensweise ist wie folgt und es ist erforderlich, das eindeutige Ergebnis zu erhalten Satz dieser beiden Felder wählt Identität( int,1,1) als AutoID, * in #Tmp aus Tabellenname, wählt min(autoID) als AutoID in #Tmp2 aus #Tmp aus, gruppiert nach Name, AutoID, wählt * aus #Tmp, wobei AutoID in(AutoID auswählt von #tmp2) Die letzte Auswahl lautet „Erhalte eine Ergebnismenge mit nicht doppeltem Namen und Adresse“ (aber es gibt ein zusätzliches AutoID-Feld. Diese Spalte kann beim eigentlichen Schreiben in der Auswahlklausel weggelassen werden)
(4) Wiederholte Abfrage
SELECT * from tablename where id in (select id from tablenamegroup by idhaving count(id) > 1)