sql >> Database teknologi >  >> RDS >> Mysql

MySQL udvælger poster for dubletter ved hjælp af flere kolonner

Hvis du vil tælle dubletter blandt flere kolonner, skal du bruge group by :

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

Hvis du kun vil have de værdier, der er duplikeret, så er antallet større end 1. Du får dette ved at bruge having klausul:

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

Hvis du rent faktisk ønsker, at alle duplikerede rækker returnerer, skal du slutte den sidste forespørgsel tilbage til de originale data:

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

Dette vil fungere, forudsat at ingen af ​​kolonneværdierne er NULL. Hvis ja, så prøv:

     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)

EDIT:

Hvis du har NULL værdier, kan du også bruge NULL -sikker operatør:

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


  1. 8 måder at tilføje minutter til en Datetime i MariaDB

  2. Forespørg om sammenligning af datoer i SQL

  3. Drop-søjle fra stort bord

  4. Hvordan parametriserer jeg en nul-streng med DBNull.Value klart og hurtigt