sql >> Databáze >  >> RDS >> Mysql

MySQL vybírá záznamy pro duplikáty pomocí více sloupců

Pokud chcete počítat duplikáty mezi více sloupci, použijte group by :

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

Pokud chcete pouze hodnoty, které jsou duplikované, pak je počet větší než 1. To získáte pomocí having klauzule:

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

Pokud skutečně chcete vrátit všechny duplicitní řádky, připojte poslední dotaz zpět k původním datům:

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 bude fungovat za předpokladu, že žádná z hodnot sloupců není NULL. Pokud ano, zkuste:

     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:

Pokud máte NULL hodnoty, můžete také použít NULL -bezpečný operátor:

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


  1. Použití pg_dump k získání příkazů vložení pouze z jedné tabulky v databázi

  2. Existuje zkratka pro SELECT * FROM?

  3. Jak zobrazit obrázková alba v příspěvcích? [pouze pomocí PHP a MYSQL]

  4. Úrovně kompatibility a primer pro odhad mohutnosti