MySQL刪除表重複記錄的三種方法舉例

chenfeng發表於2016-08-25
建立實驗表student表資料:
mysql> use test
Database changed
mysql> create table student (id int,name varchar(10));
Query OK, 0 rows affected (1.67 sec)

mysql> insert into student values (11,'aa');
Query OK, 1 row affected (0.26 sec)


mysql> insert into student values (12,'aa');
Query OK, 1 row affected (0.07 sec)


mysql> insert into student values (13,'aa');
Query OK, 1 row affected (0.12 sec)


mysql> insert into student values (14,'aa');
Query OK, 1 row affected (0.11 sec)


mysql> insert into student values (15,'bb');
Query OK, 1 row affected (0.19 sec)


mysql> insert into student values (16,'bb');
Query OK, 1 row affected (0.14 sec)


mysql> insert into student values (17,'cc');
Query OK, 1 row affected (0.15 sec)


mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|   11 | aa   |
|   12 | aa   |
|   13 | aa   |
|   14 | aa   |
|   15 | bb   |
|   16 | bb   |
|   17 | cc   |
+------+------+
7 rows in set (0.22 sec)


方法1:
mysql>  create temporary table temp as select min(id),name from student group by name;
Query OK, 3 rows affected (0.18 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> truncate table student;
Query OK, 0 rows affected (0.40 sec)


mysql> insert into student select * from temp;
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|   11 | aa   |
|   15 | bb   |
|   17 | cc   |
+------+------+
3 rows in set (0.00 sec)


mysql> drop temporary table temp;
Query OK, 0 rows affected (0.17 sec)


方法2:
mysql> create temporary table temp as select min(id) as MINID from student group by name;
Query OK, 3 rows affected (0.24 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> delete from student where id not in (select minid from temp);
Query OK, 4 rows affected (0.07 sec)


mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|   11 | aa   |
|   15 | bb   |
|   17 | cc   |
+------+------+
3 rows in set (0.00 sec)


方法3:
mysql> delete from student where id not in (select minid from (select min(id) as minid from student
group by name) b);
Query OK, 4 rows affected (0.19 sec)


mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|   11 | aa   |
|   15 | bb   |
|   17 | cc   |
+------+------+
3 rows in set (0.00 sec)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2124027/,如需轉載,請註明出處,否則將追究法律責任。

相關文章