今天遇到一個業務需求是這樣的:對在職員工超過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()