mysql刪除重複資料

2021-06-21 12:07:46 字數 2103 閱讀 8219

最近遇到刪除重複資料的問題,先分享一下解決辦法,如有不完善之處還望包涵!

舉例如下:

mysql> select * from table03;

+----+------+--------+

| id | name | degree |

+----+------+--------+

| 1 | fly | 90 |

| 2 | fly | 90 |

| 3 | fly | 90 |

| 4 | fly | 80 |

| 5 | wang | 90 |

| 6 | wang | 90 |

| 7 | wang | 90 |

| 8 | wang | 80 |

| 9 | yang | 90 |

| 10 | yang | 90 |

| 11 | yang | 90 |

| 12 | yang | 80 |

+----+------+--------+

12 rows in set (0.00 sec)

表中三個字段,現要刪除除了id相同其他都相同的記錄。

也許有人會使用;

mysql> delete from table03where id not in(select min(id) from table03 group by name, degree);

這是你會發現mysql會報錯:

error 1093 (hy000): you can'tspecify target table 'table03' for update in from clause

不能在一條語句中先select乙個表中的某些值再update這個表

但是下面的語句可以正常執行

mysql> select * from table03where id not in(select min(id) from table03 group by name, degree);

+----+------+--------+

| id | name | degree |

+----+------+--------+

| 2 | fly | 90 |

| 3 | fly | 90 |

| 6 | wang | 90 |

| 7 | wang | 90 |

| 10 | yang | 90 |

| 11 | yang | 90 |

+----+------+--------+

6 rows in set (0.07 sec)

我們會發現這些資料就是我們要刪除的,因此,可以先把分組資訊做成虛表,然後從虛表中選出結果,最後再將結果作為刪除的條件資料

mysql> delete from table03where id not in(select min(id) from (

-> select * from table03) as t group byt.name ,t.degree);

query ok, 6 rows affected (0.06sec)

mysql> select * from table03;

+----+------+--------+

| id | name | degree |

+----+------+--------+

| 1 | fly | 90 |

| 4 | fly | 80 |

| 5 | wang | 90 |

| 8 | wang | 80 |

| 9 | yang | 90 |

| 12 | yang | 80 |

+----+------+--------+

6 rows in set (0.00 sec)

問題完美解決。

MySQL 刪除重複資料

建表,插入資料,當然如果你不想測試一下,也可以直接用後面的刪除語句 create table if not exists tb01 id int unsigned primary key auto increment,name varchar 10 not null insert into tb01...

mysql刪除重複資料

id 姓名 課程名稱 分數 1 張三 數學 69 2 李四 數學 89 3 張三 數學 69 刪除除了自動編號不同,其他都相同的學生冗餘資訊 完整的sql語句如下 delete from tablename where id not in select bid from select min id ...

刪除重複資料

介紹兩種刪除重複行的方式 1.使用臨時表,分組找出重複部分的id進行刪除 刪除table goods info 中存在重複goods id的記錄 select identity int,1,1 as autoid,into temptable from goods info select min a...