Mysql學習筆記 刪除重複資料(除id不同)

2021-06-21 12:05:42 字數 2103 閱讀 4306

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

舉例如下:

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刪除重複資料

最近遇到刪除重複資料的問題,先分享一下解決辦法,如有不完善之處還望包涵!舉例如下 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 ...

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 ...