mysql 删除重复只只保留一条记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37155959/article/details/82317373

建表语句以及数据如下:

create table `staff` (
    `id` bigint (20),
    `name` varchar (60)
); 
insert into `staff` (`id`, `name`) values('1','张三');
insert into `staff` (`id`, `name`) values('2','李四');
insert into `staff` (`id`, `name`) values('3','王五');
insert into `staff` (`id`, `name`) values('4','赵六');
insert into `staff` (`id`, `name`) values('5','王五');
insert into `staff` (`id`, `name`) values('6','王五');
insert into `staff` (`id`, `name`) values('7','李四');
insert into `staff` (`id`, `name`) values('8','赵六');
insert into `staff` (`id`, `name`) values('9','赵六');

删除一条记录,不考虑其他条件一:

DELETE
FROM
  staff
WHERE id NOT IN
  (SELECT id FROM (SELECT
    id
  FROM
    staff
  GROUP BY NAME) t );

删除一条记录,保留id最新值:

-- 删除重复值,只保留一条最小记录
DELETE
FROM
  staff
WHERE NAME IN
  (SELECT
    NAME
  FROM
    (SELECT
      NAME
    FROM
      staff t1
    GROUP BY t1.name
    HAVING COUNT(t1.name) > 1) t3)

  AND id NOT IN
  ( SELECT id FROM (SELECT
    MIN(t2.id) AS id
  FROM
    staff t2
  GROUP BY t2.name
  HAVING COUNT(t2.name) > 1) t4 );

– 删除重复值,只保留一条最大记录

   -- 删除重复值,只保留一条最大记录
DELETE
FROM
  staff
WHERE NAME IN
  (SELECT
    NAME
  FROM
    (SELECT
      NAME
    FROM
      staff t1
    GROUP BY t1.name
    HAVING COUNT(t1.name) > 1) t3)

  AND id NOT IN
  ( SELECT id FROM (SELECT
    MAX(t2.id) AS id
  FROM
    staff t2
  GROUP BY t2.name
  HAVING COUNT(t2.name) > 1) t4 );

猜你喜欢

转载自blog.csdn.net/qq_37155959/article/details/82317373