mysql 把查询结果插入到表里

假设将所有男同学都分到id为1的班级

从class(班级表)中查出id为1的班级名,从student(学生表)中查到所有男的学生id和名字,插入到学生班级表中

方式1:

insert into tbl_stu_class
(
SELECT tbl_class.cl_id, tbl_student.st_id
FROM tbl_class 
JOIN tbl_student
WHERE tbl_class.cl_name = '一年级一班'
AND tbl_student.sex = '男'
)

注意:此种方式只适合查询出的数据集结构和要插入的表结构一样的情况!

即:tbl_stu_class 表结构为:

cl_name st_id st_name
…… …… ……

事实上方式一已经够用了,你只需要把查询出来的数据集结构弄的和要插入的表结构一样即可。

方式二存储过程作为了解,至于存储过程的详情我也不太了解,想要了解的小伙伴可自行百度。

方式二: 使用存储过程

此方式适合任何情况

# 创建存储过程前先检查是否存在,存在就删除
DROP PROCEDURE IF EXISTS insert_stu_class;
# 存储过程
DELIMITER //
CREATE PROCEDURE insert_stu_class(IN param VARCHAR(50))
BEGIN
	# 该变量用于标识是否还有数据需要遍历
	DECLARE flag INT DEFAULT 0;
	# 创建一个变量用来存储遍历过程中的值
	DECLARE stu_id INT;
	DECLARE cl_id INT DEFAULT (SELECT cl_id FROM tbl_class WHERE cl_name = param);
	# 查询出需要遍历的数据集合
	DECLARE idList CURSOR FOR (SELECT stu_id FROM tbl_student WHERE sex = '男');
	# 查询是否有下一个值,没有将标识设为1,相当于hasNext
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
	# 打开游标
	OPEN idList;
		# 取值设置到临时变量中
		FETCH idList INTO stu_id;
		# 遍历未结束就一直执行
		WHILE flag != 1 DO
			# 插入数据到tbl_group_role中
			INSERT INTO tbl_stu_class VALUE (cl_id, stu_id);
			#游标向后移一位
			FETCH idList INTO stu_id;
		END WHILE;
	CLOSE idList;
END;
//
CALL insert_stu_class('一年级一班');

//用完后想要删除存储过程的调用第一句删除存储过程即可
posted @ 2021-09-08 15:45  我是橘子  阅读(2501)  评论(0编辑  收藏  举报