zoukankan      html  css  js  c++  java
  • 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('一年级一班');
    
    //用完后想要删除存储过程的调用第一句删除存储过程即可
    
  • 相关阅读:
    企业面试题库1
    就业模拟试题_Net
    就业模拟试题_Java
    oracle创建用户
    Activity基础类
    Activity容器控件
    面试题_Java
    Activity功能控件
    获取工作流活动的返回值
    企业面试题库_数据库部分
  • 原文地址:https://www.cnblogs.com/Lv-orange/p/15243075.html
Copyright © 2011-2022 走看看