Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL wählt Datensätze für Duplikate mit mehreren Spalten aus

Wenn Sie Duplikate in mehreren Spalten zählen möchten, verwenden Sie group by :

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC

Wenn Sie nur die Werte haben möchten, die dupliziert werden, dann ist die Anzahl größer als 1. Dies erhalten Sie mit dem having Klausel:

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
having NumDuplicates > 1

Wenn Sie tatsächlich möchten, dass alle doppelten Zeilen zurückgegeben werden, verbinden Sie die letzte Abfrage wieder mit den ursprünglichen Daten:

select t.*
from table t join
     (select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
      from table
      group by ColumnA, ColumnB, ColumnC
      having NumDuplicates > 1
     ) tsum
     on t.ColumnA = tsum.ColumnA and t.ColumnB = tsum.ColumnB and t.ColumnC = tsum.ColumnC

Dies funktioniert, vorausgesetzt, keiner der Spaltenwerte ist NULL. Wenn ja, versuchen Sie:

     on (t.ColumnA = tsum.ColumnA or t.ColumnA is null and tsum.ColumnA is null) and
        (t.ColumnB = tsum.ColumnB or t.ColumnB is null and tsum.ColumnB is null) and
        (t.ColumnC = tsum.ColumnC or t.ColumnC is null and tsum.ColumnC is null)

BEARBEITEN:

Wenn Sie NULL haben Werten können Sie auch NULL verwenden -sicherer Operator:

     on t.ColumnA <=> tsum.ColumnA and
        t.ColumnB <=> tsum.ColumnB and
        t.ColumnC <=> tsum.ColumnC