Zwróci wszystkie rekordy, które mają duplikaty:
SELECT theTable.*
FROM theTable
INNER JOIN (
SELECT link, size
FROM theTable
GROUP BY link, size
HAVING count(ID) > 1
) dups ON theTable.link = dups.link AND theTable.size = dups.size
Podoba mi się podzapytanie b/c Mogę robić takie rzeczy, jak zaznaczanie wszystkiego oprócz pierwszego lub ostatniego. (wtedy bardzo łatwo jest przekształcić w zapytanie usuwające).
Przykład:wybierz wszystkie zduplikowane rekordy Z WYJĄTKIEM tego o maksymalnym ID:
SELECT theTable.*
FROM theTable
INNER JOIN (
SELECT link, size, max(ID) as maxID
FROM theTable
GROUP BY link, size
HAVING count(ID) > 1
) dups ON theTable.link = dups.link
AND theTable.size = dups.size
AND theTable.ID <> dups.maxID