> insert into mix (No, Name, physics_Grade) select p_No, Name, Grade from physics;
出现报错:Field 'biology_Grade' doesn't have a default value
原因是设置mix表时将biology_Grade设为非空,
>alter table mix modify biology_Grade int null;
+----+---------+---------------------+-----------------------------+
| No | Name | physics_Grade | biology_Grade |
+----+---------+--------------------+-----------------------------+
| 1 | 陈 | 70 | NULL |
| 2 | 李 | 60 | NULL |
| 3 | 张 | 63 | NULL |
| 4 | 王 | 81 | NULL |
| 5 | 何 | 77 | NULL |
+----+---------+--------------------+-----------------------------+
复制一次后结果如上
删除字段为null的字段
> delete from tablename where fieldname is null;(用的是is 而不是“=”)
在复制biology表的Grade字段到mix表中的biology_Grade的时候,出现的结果如下,与预想结果并不一致(直接插入到最下面去了)。
+---------+---------+--------------------+---------------------------+
| No | Name | physics_Grade | biology_Grade |
|+-------+---------+---------------------+----------------------------+
| 1 | 陈 | 70 | NULL |
| 2 | 李 | 60 | NULL |
| 3 | 张 | 63 | NULL |
| 4 | 王 | 81 | NULL |
| 5 | 何 | 77 | NULL |
| NULL | NULL | NULL | 65 |
| NULL | NULL | NULL | 59 |
| NULL | NULL | NULL | 82 |
| NULL | NULL | NULL | 68 |
| NULL | NULL | NULL | 60 |
+--------+--------+----------------------+--------------------------+
百度了很久,终于在一位博主的博客中找到了解决方法, 使用inner join(联表更新)来复制列数据。
> update mix mix inner join biology on mix.No = biology.b_No set mix.biology_Grade = biology.Grade;
即 要复制的目标表格A,A中目的字段field_A,要复制的数据源表格B,B中数据源字段field_B,用来连接表的A表中的字段No和B表中的字段No。
> update A A inner join B on A.No = B.No set A.field_A = B.field_B;
完成结果如下:
+------+------+-----------------------+--------------------+
| No | Name | physics_Grade | biology_Grade |
+------+------+-----------------------+--------------------+
| 1 | 陈 | 70 | 65 |
| 2 | 李 | 60 | 59 |
| 3 | 张 | 63 | 82 |
| 4 | 王 | 81 | 68 |
| 5 | 何 | 77 | 60 |
+------+------+-----------------------+--------------------+
查询物理成绩和生物成绩的平均值中大于70的学生的学号(用
having来进行筛选)
> select No, (physics_Grade + biology_Grade) / 2 as avg from mix
having avg > 70;
结果如下:
+------+-----------+
| No | avg |
+------+-----------+
| 3 | 72.5000 |
| 4 | 74.5000 |
+------+-----------+