一条sql语句完成去重留一

mysql> desc app01_hentai_img;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| image   | varchar(255) | NO   | UNI | NULL    |                |
| sort    | int(11)      | NO   |     | NULL    |                |
| name_id | int(11)      | NO   | MUL | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
4 rows in set
需求:去掉sort,name_id重复的记录。

DELETE app01_hentai_img
FROM
 app01_hentai_img, 
 (
  SELECT
   min(id) id,
   image,
   sort,
   name_id
  FROM
   app01_hentai_img
  GROUP BY
   sort,
   name_id
  HAVING
   count(sort) > 1
 ) t2
WHERE
 app01_hentai_img.name_id = t2.name_id
 and app01_hentai_img.sort = t2.sort
AND app01_hentai_img.id > t2.id;
(
  SELECT
   min(id) id,
   image,
   sort,
   name_id
  FROM
   app01_hentai_img
  GROUP BY
   sort,
   name_id
  HAVING
   count(sort) > 1
 ) t2

查询出重复记录形成一个集合(临时表t2),集合里是每种重复记录的最小ID

 app01_hentai_img.name_id = t2.name_id
 and app01_hentai_img.sort = t2.sort

关联 判断重复基准的字段


 app01_hentai_img.id > t2.id

 根据条件,删除原表中id大于t2中id的记录

猜你喜欢

转载自blog.51cto.com/9272317/2286427