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