sql >> Base de Datos >  >> RDS >> Mysql

MySQL selecciona registros para duplicados usando múltiples columnas

Si desea contar los duplicados entre varias columnas, use group by :

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

Si solo desea los valores que están duplicados, entonces el conteo es mayor que 1. Obtiene esto usando having cláusula:

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

Si realmente desea que se devuelvan todas las filas duplicadas, una la última consulta a los datos originales:

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

Esto funcionará, suponiendo que ninguno de los valores de la columna sea NULL. Si es así, intente:

     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)

EDITAR:

Si tiene NULL valores, también puede utilizar el NULL -operador seguro:

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