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

MYSQL Trùng lặp và loại bỏ hàng trùng lặp với ít dữ liệu nhất

Bạn có thể sử dụng truy vấn DELETE này, là truy vấn chung và có thể dễ dàng điều chỉnh để hỗ trợ nhiều trường hơn:

DELETE tablename.*
FROM
  tablename LEFT JOIN (
    SELECT MIN(id) min_id
    FROM
      tablename t INNER JOIN (
        SELECT
          emails, MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
        FROM
          tablename
        GROUP BY
          emails) m
      ON t.emails=m.emails
         AND ((t.name IS NOT NULL) + (t.surname IS NOT NULL))=m.max_non_nulls
    GROUP BY
      t.emails) ids
  ON tablename.id=ids.min_id
WHERE
  ids.min_id IS NULL

Vui lòng xem fiddle tại đây .

Truy vấn này trả về số lượng trường không rỗng tối đa cho mọi email:

SELECT
  emails,
  MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
FROM
  tablename
GROUP BY
  emails

Sau đó, tôi kết hợp truy vấn này với tên bảng, để nhận ID tối thiểu cho mọi email có số trường không rỗng tối đa:

SELECT MIN(id) min_id
FROM
  tablename t INNER JOIN (
    SELECT
      emails, MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
    FROM
      tablename
    GROUP BY
      emails) m
  ON t.emails=m.emails
     AND ((t.name IS NOT NULL) + (t.surname IS NOT NULL))=m.max_non_nulls
GROUP BY
  t.emails

và sau đó tôi sẽ xóa tất cả các hàng có ID không được trả về bởi truy vấn này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách hiển thị ẩn hàng bảng html dựa trên điều kiện php

  2. IP đã chuyển đổi ip2long nên được lưu trữ như thế nào trong MySQL?

  3. Tabe trường tự động cập nhật trạng thái kiểm tra ngày hệ thống sử dụng truy vấn trong mysql &java

  4. Điền nội dung phương thức bằng PHP và AJAX?

  5. Cảnh báo thư mục user / local / mysql / data không thuộc sở hữu của người dùng mysql