mysql直接将查询结果导入表_MySql将查询结果插入到另外一张表

今天遇到一个业务需求是这样的:对在职员工超过55岁提醒。我想的思路是查询员工表,然后将超过55岁的人的信息存到另一个表,并且以消息的形式给用户提示,用户处理掉之后此消息失效(在数据库做标记)。

不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段。(当然可以混合查询多个表进行插入)

本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表中。此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 。

类别一、 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO目标表SELECT  * FROM来源表 ;

例如,要将 articles 表插入到 newArticles 表中,则可以通过如下SQL语句实现:

INSERT INTOnewArticlesSELECT  * FROMarticles ;

类别二、 如果只希望导入指定字段,可以用这种方法:

INSERT INTO目标表 (字段1, 字段2, ...)SELECT字段1, 字段2, ...FROM来源表 ;

请注意以上两表的字段必须一致,否则会出现数据转换错误。

===========================================================================================

INSERT INTOTPersonnelChange(

UserId,

DepId,

SubDepId,

PostionType,

AuthorityId,

ChangeDateS,

InsertDate,

UpdateDate,

SakuseiSyaId

)SELECTUserId,

DepId,

SubDepId,

PostionType,

AuthorityId,

DATE_FORMAT(EmployDate,'%Y%m%d'),

NOW(),

NOW(),1

FROMTUserMstWHERE`Status`= 0

AND QuitFlg = 0

AND UserId < 2

---------------------自己的业务实现----------------------------

1.插入语句:

年龄大于55的插入,且只插入一条数据,

INSERT INTO message

(messageid,

NAME,

idCode,

sex,

birthday,

headaddress,

isDispose)

SELECT DISTINCT

emp.employeeId,

emp.name,

emp.idCode,

emp.sex,

emp.birthday,

emp.headaddress,'0'FROM employee_out emp,

haulemployeeout haulemp,

haulinfo haul

WHERE emp.idCode=haulemp.empoutIdcard

AND haulemp.bigid=haul.bigid

AND haul.bigstatus= '进行中'AND emp.employeeId NOT IN(SELECT

messageid

FROM message)

AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW())> 54

2.在此基础上写的存储过程:

DELIMITER $$CREATE PROCEDURE`queryOlderPerson`()BEGIN

/*将外部55岁以上插入消息表*/

INSERT INTOmessage

(messageid,

NAME,

idCode,

sex,

birthday,

empType,

isDispose)SELECT DISTINCTemp.employeeId,

emp.name,

emp.idCode,

emp.sex,

emp.birthday,'0','0'

FROMemployee_out emp,

haulemployeeout haulemp,

haulinfo haulWHERE emp.idCode =haulemp.empoutIdcardAND haulemp.bigid =haul.bigidAND haul.bigstatus = '进行中'

AND emp.employeeId NOT IN(SELECTmessageidFROMmessage)AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) > 54;/*将内部55岁以上插入消息表*/

INSERT INTOmessage

(messageid,

NAME,

idCode,

sex,

birthday,

empType,

isDispose)SELECT DISTINCTemp.employeeId,

emp.name,

emp.idCode,

emp.sex,

emp.birthday,'1','0'

FROMemployee_in empWHERE emp.employeeId NOT IN(SELECTmessageidFROMmessage)AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) > 54;END$$

DELIMITER ;

3.mysql事件调用上面存储过程:(每分钟执行一次上面存储过程)

CREATE event queryOlderPer ON SCHEDULE EVERY 1 MINUTE STARTS NOW() DO CALL queryOlderPerson()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值