Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL chọn bản ghi cho các bản sao bằng cách sử dụng nhiều cột

Nếu bạn muốn đếm các bản sao giữa nhiều cột, hãy sử dụng group by :

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

Nếu bạn chỉ muốn các giá trị được trùng lặp, thì số lượng lớn hơn 1. Bạn nhận được điều này bằng cách sử dụng having mệnh đề:

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

Nếu bạn thực sự muốn tất cả các hàng trùng lặp trả về, hãy nối truy vấn cuối cùng trở lại dữ liệu ban đầu:

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

Điều này sẽ hoạt động, giả sử không có giá trị cột nào là NULL. Nếu vậy, hãy thử:

     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)

CHỈNH SỬA:

Nếu bạn có NULL , bạn cũng có thể sử dụng NULL - nhà điều hành an toàn:

     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. Thực hiện thay đổi đối với nhiều bản ghi dựa trên sự thay đổi của một bản ghi với SQL

  2. Làm thế nào để thay đổi thư mục dữ liệu MySQL?

  3. MySQL từ số thập phân (13,6) sang tiền tệ

  4. MySQL CHÈN VÀO ... GIÁ TRỊ và CHỌN

  5. Có thể xác định cột dấu thời gian không rỗng và không có giá trị mặc định và không có hành vi đặc biệt khi cập nhật không?