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

  

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

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

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

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

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

  1. INSERT INTOnewArticlesSELECT  * FROMarticles ;

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

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

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

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

  1. INSERT INTO TPersonnelChange(
  2.  
  3. UserId,
  4.  
  5. DepId,
  6.  
  7. SubDepId,
  8.  
  9. PostionType,
  10.  
  11. AuthorityId,
  12.  
  13. ChangeDateS,
  14.  
  15. InsertDate,
  16.  
  17. UpdateDate,
  18.  
  19. SakuseiSyaId
  20.  
  21. )SELECT
  22.  
  23. UserId,
  24.  
  25. DepId,
  26.  
  27. SubDepId,
  28.  
  29. PostionType,
  30.  
  31. AuthorityId,
  32.  
  33. DATE_FORMAT(EmployDate, '%Y%m%d'),
  34.  
  35. NOW(),
  36.  
  37. NOW(),
  38.  
  39. 1
  40.  
  41. FROM
  42.  
  43. TUserMst
  44.  
  45. WHERE
  46.  
  47. `Status` = 0
  48.  
  49. AND QuitFlg = 0
  50.  
  51. AND UserId < 2

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

1.插入语句:

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

  1. INSERT INTO message
  2. (messageid,
  3. NAME,
  4. idCode,
  5. sex,
  6. birthday,
  7. headaddress,
  8. isDispose)
  9. SELECT DISTINCT
  10. emp.employeeId,
  11. emp.name,
  12. emp.idCode,
  13. emp.sex,
  14. emp.birthday,
  15. emp.headaddress,
  16. ''
  17. FROM employee_out emp,
  18. haulemployeeout haulemp,
  19. haulinfo haul
  20. WHERE emp.idCode = haulemp.empoutIdcard
  21. AND haulemp.bigid = haul.bigid
  22. AND haul.bigstatus = '进行中'
  23. AND emp.employeeId NOT IN(SELECT
  24. messageid
  25. FROM message)
  26. AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) >

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

  1. DELIMITER $$
  2. CREATE PROCEDURE `queryOlderPerson`()
  3. BEGIN
  4. /*将外部55岁以上插入消息表*/
  5. INSERT INTO message
  6. (messageid,
  7. NAME,
  8. idCode,
  9. sex,
  10. birthday,
  11. empType,
  12. isDispose)
  13. SELECT DISTINCT
  14. emp.employeeId,
  15. emp.name,
  16. emp.idCode,
  17. emp.sex,
  18. emp.birthday,
  19. '',
  20. ''
  21. FROM employee_out emp,
  22. haulemployeeout haulemp,
  23. haulinfo haul
  24. WHERE emp.idCode = haulemp.empoutIdcard
  25. AND haulemp.bigid = haul.bigid
  26. AND haul.bigstatus = '进行中'
  27. AND emp.employeeId NOT IN(SELECT
  28. messageid
  29. FROM message)
  30. AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) > 54;
  31. /*将内部55岁以上插入消息表*/
  32. INSERT INTO message
  33. (messageid,
  34. NAME,
  35. idCode,
  36. sex,
  37. birthday,
  38. empType,
  39. isDispose)
  40. SELECT DISTINCT
  41. emp.employeeId,
  42. emp.name,
  43. emp.idCode,
  44. emp.sex,
  45. emp.birthday,
  46. '',
  47. ''
  48. FROM employee_in emp
  49. WHERE emp.employeeId NOT IN(SELECT
  50. messageid
  51. FROM message)
  52. AND TIMESTAMPDIFF(YEAR,emp.birthday,NOW()) > 54;
  53. END $$
  54. DELIMITER ;

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

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

 

  

MySql将查询结果插入到另外一张表的更多相关文章

  1. Oracle中把一张表查询结果插入到另一张表中

      1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...

  2. sql语句 怎么从一张表中查询数据插入到另一张表中?

    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

  3. SQL 将查询结果插入到另一张表中

    INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件; ...

  4. mysql如何查询一个字段在哪几张表中

    SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'xxx' ; xxx替换成需 ...

  5. sql把一个表数据插入到另一张表

    把一个表数据插入到另一张表 insert into tableB (field1,field2,field3,field4) select field1,field2,field3,'val4' fr ...

  6. Sqlserver将数据从一张表插入到另一张表

    1.如果是整个表复制表达如下: insert into table1 select * from table2 2.如果是有选择性的复制数据表达如下: insert into table1(colum ...

  7. sqlserver查询当前库下,一张表的表名,字段名,字段类型,字段长度

    sqlserver版: 查询当前数据库下所有表名: select * from sys.tables; 查询当前库下,一张表的表名,字段名,字段类型,字段长度: select a.name 表名,b. ...

  8. MySql频繁查询、插入数据

    当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...

  9. 05 MySQL之查询、插入、更新与删除

    01-查询数据 语法格式: select * | 字段列表 from 表1, 表2 where 表达式 group by ... having ... order by ... limit .. # ...

随机推荐

  1. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  2. ftp - Internet 文件传输程序 (file transfer program)

    概述 (SYNOPSIS) ftp [-pinegvd ] [host ] pftp [-inegvd ] [host ] 说明 (DESCRIPTION) 用户通过 Ftp 这个程序来使用 Inte ...

  3. C++类型强制转换<转>

    转载:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型 ...

  4. 多线程下载命令--axel

    axel是轻量级多线程下载工具,对比传统下载工具curl和wget,下载速度上提升不少 centos安装如下 yum install -y axel 命令行用法 axel [option] url1 ...

  5. java 操作mongodb查询条件的常用设置

    java操作mongodb进行查询,常用筛选条件的设置如下: 条件列表:BasicDBList condList = new BasicDBList(); 临时条件对象:BasicDBObject c ...

  6. ExtJs如何使用自定义插件动态保存表头配置(隐藏或显示)

    关于保存列表表头的配置,一般我们不需要与后台交互,直接保存在 localStorage 中就能满足常规使用需求(需要浏览器支持). 直接上代码,插件: Ext.define('ux.plugin.Co ...

  7. URL链接后面的参数解析,与decode编码解码;页面刷新回到顶部jquery

    function request() { var urlStr = location.search; ) { theRequest = []; return; } urlStr = urlStr.su ...

  8. 【php】 get 和 post 比较

    来源 php.net 评论区 -- nucc1 worth clarifying: POST is not more secure than GET. The reasons for choosing ...

  9. django(django框架了解,http协议)

    Django框架 学习目的: 完成web应用的编写 django的作用: 0.业务逻辑分发(路由分发) 1.业务逻辑实现: 业务逻辑根据分发来完成具体的事,再根据具体事的需求,和页面或数据库交互,返回 ...

  10. 数据结构( Pyhon 语言描述 ) — —第10章:树

    树的概览 树是层级式的集合 树中最顶端的节点叫做根 个或多个后继(子节点). 没有子节点的节点叫做叶子节点 拥有子节点的节点叫做内部节点 ,其子节点位于层级1,依次类推.一个空树的层级为 -1 树的术 ...