Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL pilih catatan untuk duplikat menggunakan beberapa kolom

Jika Anda ingin menghitung duplikat di antara beberapa kolom, gunakan group by :

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

Jika Anda hanya ingin nilai yang digandakan, maka hitungannya lebih besar dari 1. Anda mendapatkannya menggunakan having klausa:

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

Jika Anda benar-benar ingin semua baris duplikat kembali, gabungkan kueri terakhir kembali ke data asli:

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

Ini akan berfungsi, dengan asumsi tidak ada nilai kolom yang NULL. Jika demikian, cobalah:

     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:

Jika Anda memiliki NULL nilai, Anda juga dapat menggunakan NULL -operator aman:

     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. Bagaimana cara melewatkan nilai baris saat ini dalam modal?

  2. MySQL masukkan ke DATETIME:apakah aman menggunakan format ISO::8601?

  3. Bagaimana cara menggunakan pernyataan IF dalam permintaan bergabung MySQL?

  4. Kesalahan penguraian:kesalahan sintaks, tak terduga (T_VARIABLE)

  5. PDO::__construct():Server mengirim charset (255) yang tidak diketahui klien. Tolong, laporkan ke pengembang