Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL Дедуплицирайте и премахнете дублиращия се ред с най-малко данни

Можете да използвате тази заявка DELETE, която е обща и може лесно да се адаптира, за да поддържа повече полета:

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

Моля, вижте цигулка тук .

Тази заявка връща максималния брой ненулеви полета за всеки имейл:

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

След това се присъединявам към тази заявка с име на таблица, за да получа минималния идентификатор за всеки имейл, който има максимален брой ненулеви полета:

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

и след това изтривам всички редове, които имат идентификатор, който не се връща от тази заявка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да отворя mysql-workbench

  2. единична фиксирана таблица с множество колони срещу гъвкави абстрактни таблици

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Дублиран запис '' за ключ 'PRIMARY'

  4. Преместване на ред от една таблица в друга (Вмъкване на списък със стойности не съвпада със списъка с колони)

  5. Как правилно да завъртите в съхранена функция на MySQL?