Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak znaleźć duplikaty w MySQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać pola według nazwy w zapytaniu Python?

  2. Parsowanie bardzo dużych plików XML w php

  3. tomcat7 — źródło danych jdbc — najprawdopodobniej spowoduje to wyciek pamięci

  4. MySQL:uzyskaj średnią różnicę czasu?

  5. Jak ograniczyć wartość kolumny w SQLite / MySQL?