MySql将查询结果插入到另一张表

  

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

  

无论是在网站开发仍是在应用程序开发中,咱们常常会碰到须要将MySQL或MS SQLServer某个表的数据批量导入到另外一个表的状况,甚至有时还须要指定导入字段。(固然能够混合查询多个表进行插入)sql

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

类别1、 若是两张张表(导出表和目标表)的字段一致,而且但愿插入所有数据,能够用这种方法:网站

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

例如,要将 articles 表插入到 newArticles 表中,则能够经过以下SQL语句实现:ui

INSERT INTOnewArticlesSELECT  * FROMarticles ;

类别2、 若是只但愿导入指定字段,能够用这种方法:spa

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

请注意以上两表的字段必须一致,不然会出现数据转换错误。命令行

===========================================================================================code

INSERT INTO TPersonnelChange(

UserId,

DepId,

SubDepId,

PostionType,

AuthorityId,

ChangeDateS,

InsertDate,

UpdateDate,

SakuseiSyaId

)SELECT

UserId,

DepId,

SubDepId,

PostionType,

AuthorityId,

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

NOW(),

NOW(),

1

FROM

TUserMst

WHERE

`Status` = 0

AND QuitFlg = 0

AND UserId < 2

 

 

 

 

 

---------------------本身的业务实现----------------------------blog

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 INTO message
            (messageid,
             NAME,
             idCode,
             sex,
             birthday,
             empType,
             isDispose)
SELECT DISTINCT
  emp.employeeId,
  emp.name,
  emp.idCode,
  emp.sex,
  emp.birthday,
  '0',
  '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;
    /*将内部55岁以上插入消息表*/
INSERT INTO message
            (messageid,
             NAME,
             idCode,
             sex,
             birthday,
             empType,
             isDispose)
SELECT DISTINCT
  emp.employeeId,
  emp.name,
  emp.idCode,
  emp.sex,
  emp.birthday,
  '1',
  '0'
FROM employee_in emp
WHERE  emp.employeeId NOT IN(SELECT
                                messageid
                              FROM message)
    AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) > 54;
  END $$
  DELIMITER ;

 

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

CREATE event queryOlderPer  ON SCHEDULE EVERY 1 MINUTE STARTS NOW() DO CALL queryOlderPerson()
相关文章
相关标签/搜索