
有两个表的表结构如下:
表class(班级):
字段 | 类型 | 备注 |
Sid | Int | 主键 |
Name | Varchar | 班级名称 |
表student_old(学生表,旧表):
字段 | 类型 | 备注 |
Sid | Int | 主键 |
Name | Varchar | 学生姓名 |
Sex | Int | 性别 1:男 2:女 |
Age | Int | 年龄 |
Class_ID | Int | 所属班级ID |
表student_new(学生表,新表):
字段 | 类型 | 备注 |
Sid | Int | 主键 |
Name | Varchar | 学生姓名 |
Sex_name | Varchar | 性别名称(男 或 女) |
Age | Int | 年龄 |
Class_name | Varchar | 班级名称 |
student_old表和class表都有原始数据。


现在要求通过sql语句,将student_old表中的数据,对应插入到student_new表中,并且将原本sex和class_id字段,通过规则插入到student_new表中。

创建表
CREATE TABLE `class` (
`sid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `class` VALUES ('1', '初一一班');
INSERT INTO `class` VALUES ('2', '初一二班');
INSERT INTO `class` VALUES ('3', '初一三班');
CREATE TABLE `student_new` (
`sid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`sex_name` varchar(11) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`class_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student_old` VALUES ('1', '黄晓明', '1', '17', '2');
INSERT INTO `student_old` VALUES ('2', '赵丽颖', '2', '21', '1');
CREATE TABLE `student_old` (
`sid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`sex` int(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`class_id` int(11) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在要求通过sql语句,将student_old表中的数据,对应插入到student_new表中,并且将原本sex和class_id字段,通过规则插入到student_new表中。
INSERT into student_new
SELECT s.sid,s.`name` ,
(CASE WHEN s.sex=1 THEN
"男"
ELSE
"女"
END )sex_name,
s.age,(CASE WHEN c.sid=1 THEN
"初一一班"
WHEN c.sid=2 THEN
"初一二班"
ELSE
"初一三班"
END ) class_name
FROM student_old s
LEFT JOIN class c
on c.sid = s.class_id;

知识点
1、Insert into ... Select ...
2、Case ... When ...
3、子查询