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

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

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



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