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