Mysql刪除表中重複資料
阿新 • • 發佈:2021-01-13
--------文章內容為個人理解,歡迎交流--------
一張表中有重複資料,需要刪除重複的資料,只保留(最大/最小)一條。
例:
現有A表:
id:主鍵(唯一)
b:資料(有重複)
需求:
刪除表中重複的資料,保留相同資料中id最小的資料。
效果:
sql
思路:先查詢出去重過後的id(可用分組),再刪除其它id的資料
DELETE FROM A WHERE id NOT IN ( SELECT id FROM ( SELECT min(id) AS id FROM A GROUP BY b ) C );
sql解釋
DELETE FROM A # 表A WHERE id NOT IN ( # 需要刪除資料的id,不包含下面查詢出來的id SELECT # 此條SELECT查詢不可省,否則報錯:You can't specify target table 'A' for update in FROM clause。 # 內層SELECT分組後,再次查詢C表獲得id id FROM ( SELECT min(id) AS id # 保留相同資料中,id最小的資料。AS不可省,命名別名為id。 # 若省略,執行2個SELECT報錯:Unknown column 'id' in 'field list'。 # 整體語句執行不會報錯,但無效果。 FROM A GROUP BY b ) C # 此處的C,不可省。分組後的資料,生成表C,外層SELECT查詢C表,獲取最終的id );