一條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的記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章