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('一年級一班');

//用完后想要刪除存儲過程的調用第一句刪除存儲過程即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM