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