Heim > php教程 > PHP开发 > SQL findet alle doppelten Datensatzdaten in einer Tabelle

SQL findet alle doppelten Datensatzdaten in einer Tabelle

高洛峰
Freigeben: 2016-11-16 11:00:54
Original
1506 Leute haben es durchsucht

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

Ü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)
Nach dem Login kopieren

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
    )
)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

(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
Nach dem Login kopieren

Wenn auch das Geschlecht gleich ist, ist das Ergebnis wie folgt:

SELECT Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
Nach dem Login kopieren

(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)
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage