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

MySQL wybierz rekordy dla duplikatów przy użyciu wielu kolumn

Jeśli chcesz policzyć duplikaty w wielu kolumnach, użyj group by :

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

Jeśli chcesz tylko wartości, które są zduplikowane, liczba jest większa niż 1. Otrzymasz to za pomocą having klauzula:

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

Jeśli rzeczywiście chcesz, aby wszystkie zduplikowane wiersze zostały zwrócone, połącz ostatnie zapytanie z powrotem do oryginalnych danych:

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

To zadziała, zakładając, że żadna z wartości kolumny nie jest NULL. Jeśli tak, spróbuj:

     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)

EDYCJA:

Jeśli masz NULL wartości, możesz również użyć NULL -bezpieczny operator:

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


  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 tworzyć i wykonywać funkcje i procedury składowane MySQL

  2. Ostrzeżenie:mysql_result() [function.mysql-result]:Nie można przeskoczyć do wiersza 0 w indeksie wyników MySQL 5 w profile.php w wierszu 11

  3. Dlaczego PDO drukuje moje hasło, gdy połączenie nie powiedzie się?

  4. Jak działa funkcja CHARACTER_LENGTH() w MySQL

  5. Odwrotność SQL LIKE '%value%'