将一个表的结果集插入到另一个表中

举例1:

insert into table_b(time,score,totalscore)
select time,score,sum(score) over (order by time)
from table_a



举例2:

insert into JobInfo_analysis(Salary,address,jobname,company,companysize,companytype,Educational,remak,Releasetime,created,id,LinkStatus,Reply,MyNote,LoveLevel) 
select Salary,address,jobname,company,companysize,companytype,Educational,remak,Releasetime,created,id,LinkStatus,Reply,MyNote,LoveLevel 
from JobInfo 
where address like'%北京%'      
    and (jobname like'%ios%' or jobname like'%iphone%' or remak like '%ios%' or remak like 'iphone')      
    and cast(substr(Salary,7,12) as int) >= 20001  
    and cast(substr(Salary,7,12) as int) <= 35000    
    and company not like '%咨询%' 
    and company not like '%顾问%'    
    and company not like '%猎头%'    
    and company not like '%管理%'
    and company not like '%猎聘%'
    and company not like '%某公司%'
    and company not like '%人力资源%'
    and company not like '%人才服务%'    
    

 总结:

SQL数据库中把一个表中的数据复制到另一个表中

1、如果是整个表复制表达如下:

insert into table1 select  * from table2


2、如果是有选择性的复制数据表达如下:

insert into table1(column1,column2,column3...) select column1,column2,colunm3... from table2


3、一个数据库中的表中的数据复制到另一个数据库中的一个表,使用方法如下:

insert into 数据库A.dbo.table1(col1,col2,col3...) select col1,col2,col3... from 数据库B.dbo.table2

是的,在MySQL存储过程中,可以在循环中遍历另一个结果。可以使用另一个游标来遍历第二个结果,并在循环中执行所需的操作。以下是一个简单的例子,演示如何在存储过程中循环遍历两个结果。 假设我们有两个 `employee` 和 `department`,其中 `employee` 存储了员工的信息,包括 `id`、`name` 和 `department_id`,`department` 存储了部门的信息,包括 `id` 和 `name`。 ``` CREATE TABLE employee ( id INT PRIMARY KEY, name VARCHAR(50), department_id INT ); CREATE TABLE department ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 现在,我们要写一个存储过程,用于将每个部门的员工薪水总和计算出来,并将结果插入到另一个 `department_summary` 中。我们可以使用两个游标来遍历 `employee` 和 `department` ,并在循环中执行所需的操作。 ``` DELIMITER // CREATE PROCEDURE calculate_department_summary() BEGIN DECLARE done1 INT DEFAULT FALSE; DECLARE done2 INT DEFAULT FALSE; DECLARE dept_id INT; DECLARE dept_name VARCHAR(50); DECLARE total_salary INT; -- 声明游标1,用于遍历部门 DECLARE cur_dept CURSOR FOR SELECT id, name FROM department; -- 声明游标2,用于遍历员工 DECLARE cur_emp CURSOR FOR SELECT department_id, salary FROM employee WHERE department_id = dept_id; -- 定义异常处理器 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE; -- 打开游标1 OPEN cur_dept; -- 循环遍历游标1 read_loop1: LOOP -- 从游标1中读取一行记录 FETCH cur_dept INTO dept_id, dept_name; IF done1 THEN LEAVE read_loop1; END IF; -- 初始化总薪水 SET total_salary = 0; -- 打开游标2 OPEN cur_emp; -- 循环遍历游标2 read_loop2: LOOP -- 从游标2中读取一行记录 FETCH cur_emp INTO dept_id, total_salary; IF done2 THEN LEAVE read_loop2; END IF; -- 计算总薪水 SET total_salary = total_salary + total_salary; END LOOP; -- 关闭游标2 CLOSE cur_emp; -- 插入部门薪水总和到 department_summary INSERT INTO department_summary (department_id, department_name, total_salary) VALUES (dept_id, dept_name, total_salary); END LOOP; -- 关闭游标1 CLOSE cur_dept; END// DELIMITER ; ``` 在上面的存储过程中,我们首先声明了两个游标 `cur_dept` 和 `cur_emp`,用于查询 `department` 和 `employee` 。然后,我们打开游标1,并使用循环遍历游标1中的每个部门。在每次循环中,我们使用部门ID从 `employee` 表中查询该部门的员工,并使用游标2遍历员工记录。在第二个循环中,我们计算员工薪水的总和,并将其保存到 `total_salary` 变量中。最后,我们将部门ID、部门名称和薪水总和插入 `department_summary` 中。 需要注意的是,我们在存储过程中使用了两个异常处理器 `CONTINUE HANDLER FOR NOT FOUND`,用于在游标遍历完所有记录后关闭游标。在第一个循环中,我们使用异常处理器 `done1` 来关闭游标1,在第二个循环中,我们使用异常处理器 `done2` 来关闭游标2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值