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,
''
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()) >
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,
'',
''
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,
'',
''
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()
MySql将查询结果插入到另外一张表的更多相关文章
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- sql语句 怎么从一张表中查询数据插入到另一张表中?
sql语句 怎么从一张表中查询数据插入到另一张表中? ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...
- SQL 将查询结果插入到另一张表中
INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件; ...
- mysql如何查询一个字段在哪几张表中
SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'xxx' ; xxx替换成需 ...
- sql把一个表数据插入到另一张表
把一个表数据插入到另一张表 insert into tableB (field1,field2,field3,field4) select field1,field2,field3,'val4' fr ...
- Sqlserver将数据从一张表插入到另一张表
1.如果是整个表复制表达如下: insert into table1 select * from table2 2.如果是有选择性的复制数据表达如下: insert into table1(colum ...
- sqlserver查询当前库下,一张表的表名,字段名,字段类型,字段长度
sqlserver版: 查询当前数据库下所有表名: select * from sys.tables; 查询当前库下,一张表的表名,字段名,字段类型,字段长度: select a.name 表名,b. ...
- MySql频繁查询、插入数据
当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...
- 05 MySQL之查询、插入、更新与删除
01-查询数据 语法格式: select * | 字段列表 from 表1, 表2 where 表达式 group by ... having ... order by ... limit .. # ...
随机推荐
- UVA 10735 Euler Circuit (最大流)
题意:求混合图的欧拉路径. 一句话总结:网络流,最主要在于建图,此题是将出度则是和流量联系在了一起,用最大流来调整边的指向. 分析: 这题的困难之处在于无向边只能用一次,相当于一个方向未定的有向边. ...
- shell 简单脚本 2
#!/bin/bash source /etc/profile APPLICATIONS_HOME="/cpic/cpicapp/cpic_analy/jars" APPLICAT ...
- Java MiniUi datagrid加载数据时,如果使用virtualScroll="false",数据多一点可能就会加载不出来
datagrid的值为 virtualScroll="true" 问题解决.
- Codeforces Round #273 (Div. 2)-A. Initial Bet
http://codeforces.com/contest/478/problem/A A. Initial Bet time limit per test 1 second memory limit ...
- js采用正则表达式获取地址栏参数
getQueryString:function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...
- POI写入word doc 03 模板的实例
在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,而HWPFDocument是要依附于一个doc文件的.所以通 ...
- Java中的线程--线程中的工具
这主要想写一下Java中的jdk提供的一些线程中的工具, 一.semaphore信号灯 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制,使用Semaphore可以控制同时访问资源的 ...
- 【OS_Linux】Linux中虚拟机的三种上网方式——桥接、NAT、Host-only
1.桥接 桥接方便做实验,配置ip方便.可以和局域网中的其他机器进行通信,也可以和公网进行通信.缺点是会占用主机所在局域网的一个ip. 2. NAT NAT模式下虚拟机可以和主机进行通信,可以上网,而 ...
- mysql 5.5安装/卸载使用总结
安装 卸载 1.在控制面板->卸载与更改程序 中卸载mysql 2.删除安装目录下的mysql文件夹 3.删除隐藏文件夹C:\ProgramData\中的MySQL,否则再次安装时会卡在 sta ...
- UNIX环境C语言进程通信
一.信号管理 1.函数signal signal函数是UNIX系统信号机制最简单的接口 #include <signal.h> typedef void (*sighandler_t)(i ...