一、stu 表结构如图
+----+-----------+----------+---------+-------------+
| id | firstname | lastname | address | phone |
+----+-----------+----------+---------+-------------+
| 4 | Wu | BaiTao | Hunan | 12345678912 |
| 5 | Zhou | BaiTao | Hunan | 12345678912 |
| 6 | Sun | BaiTao | Hunan | 12345678912 |
| 7 | Li | BaiTao | Hunan | 12345678912 |
| 8 | Liu | BaiTao | Hunan | 12345678912 |
| 11 | Li | Mazi | Hunan | 12345678912 |
| 12 | Zhang | Mazi | Hunan | 12345678912 |
| 13 | Zheng | BaiTao | Hunan | 12345678912 |
| 14 | Wang | BaiTao | Hunan | 12345678912 |
| 15 | Zeng | BaiTao | Hunan | 12345678912 |
| 16 | Qiu | BaiTao | Hunan | 12345678912 |
| 17 | Dan | BaiTao | Hunan | 12345678912 |
| 18 | Hua | BaiTao | Hunan | 12345678912 |
| 19 | Mao | BaiTao | Hunan | 12345678912 |
| 22 | zou | baitao | Hunan | 13212345632 |
+----+-----------+----------+---------+-------------+
二、任务要求:删除lastname中重复的行
第一步、使用group by子句找出所有不同的lastname字段
mysql>select lastname from stu group by lastname having count(*)>1;
输出结果
+----------+
| lastname |
+----------+
| BaiTao |
| Feng |
| Gao |
| Mazi |
| Tao |
+----------+
第二步,找出出现这些字段出现的最小的id
select min(id) from stu group by lastname;
输出结果
+---------+
| min(id) |
+---------+
| 4 |
| 20 |
| 10 |
| 11 |
| 9 |
+---------+
第三步:删除所有的其他行除了那些出现在第二步中的id
delete from stu where id not in(select min(id) from stu group by lastname);
出现下面的错误,
You can't specify target table 'stu' for update in FROM clause
在网上找到结果说,我们可以将select出来的结果作为一张中间表,然后从这个中间表里面去删除
delete from stu where id not in
(select s.id from (select min(id) as id from stu s group by lastname) s
);
输出结果
+----+-----------+----------+---------+-------------+
| id | firstname | lastname | address | phone |
+----+-----------+----------+---------+-------------+
| 4 | Wu | BaiTao | Hunan | 12345678912 |
| 9 | Wang | Tao | Hunan | 12345678912 |
| 10 | Zhao | Gao | Hunan | 12345678912 |
| 11 | Li | Mazi | Hunan | 12345678912 |
| 20 | Li | Feng | GuangXi | 12345678998 |
+----+-----------+----------+---------+-------------+
将一张表复制到另一张表中
第一步 首先创建一张表与另一张表类似
create table stu like student;
第二步、将student表中查询到的数据全部插入到stu中
insert into stu select *from student;
参考文章
https://blog.youkuaiyun.com/u014723529/article/details/51218638