zoukankan      html  css  js  c++  java
  • 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 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

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

    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()

     

      

  • 相关阅读:
    idoc 和 bapi 和 rfc 之间的区别
    ABAP--如何在ALV_Grid的函数中定义下拉列表
    ABAP
    关于SAP的视图类型
    程序中条用其他程序中已经存在的PERFORM
    通过SMATFORMS打印程序的参考模板
    字号尺寸大小对照表
    ubuntu 没有桌面 没有图标,只剩下壁纸
    latex ctex 的section不能写中文, /href
    System Verilog的概念以及与verilog的对比
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8351655.html
Copyright © 2011-2022 走看看