sql >> Databasteknik >  >> RDS >> Mysql

MySQL väljer poster för dubbletter med flera kolumner

Om du vill räkna dubbletter bland flera kolumner, använd group by :

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

Om du bara vill ha de värden som dupliceras är antalet större än 1. Du får detta med hjälp av having klausul:

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

Om du verkligen vill att alla dubbletter av raderna ska returneras, koppla sedan tillbaka den sista frågan till originaldata:

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

Detta kommer att fungera, förutsatt att inget av kolumnvärdena är NULL. Om så är fallet, försök sedan:

     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:

Om du har NULL värden kan du också använda NULL -säker operatör:

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


  1. Hur kan jag aktivera den federerade motorn i mysql efter installationen?

  2. Databasnamnkonventioner från Microsoft?

  3. kontrollera efter giltigt datum som deklareras i varchar2

  4. Oracle VÄLJ TOP 10 poster