MySQL如何将select子查询结果横向拼接后插入数据表中

我的要求具体是这样的。我有数据表audit的结构如下:

+-----------+------------+------+-----+-------------------+-------+
| Field     | Type       | Null | Key | Default           | Extra |
+-----------+------------+------+-----+-------------------+-------+
| auditDate | date       | NO   |     | NULL              |       |
| invNum    | int(11)    | NO   |     | NULL              |       |
| fltNum    | int(11)    | NO   |     | NULL              |       |
| auditNum  | int(11)    | NO   |     | NULL              |       |
| missNum   | int(11)    | NO   |     | NULL              |       |
| invType   | tinyint(4) | NO   |     | NULL              |       |
| time      | timestamp  | NO   |     | CURRENT_TIMESTAMP |       |
+-----------+------------+------+-----+-------------------+-------+

除了最后一列默认是当前时间戳,每一列的结果都是一个select查询结果。如何将查询的结果合并成一条记录插入到上面的数据表中呢?网上也没有确切的答案,摸索了很久,最后,终于在百般尝试下使用join进行横向拼接完成了我想要的功能!参考sql语句如下:

insert into audit_template(auditDate,invNum,fltNum,auditNum,missNum,invType) select * from (select current_date)tmp1 join (select 1)tmp2 join (select 1 as fltNum)tmp3 join (select 6 as auditNum)tmp4 join (select 2)tmp5 join (select 1)tmp6;

插入成功后,查询结果如下:

select * from audit;
+------------+--------+--------+----------+---------+---------+---------------------+
| auditDate  | invNum | fltNum | auditNum | missNum | invType | time                |
+------------+--------+--------+----------+---------+---------+---------------------+
| 2016-07-02 |      1 |      1 |        6 |       2 |       1 | 2016-07-02 11:13:39 |
+------------+--------+--------+----------+---------+---------+---------------------+

拓展一下,如果我现在想让audit表中的missNum的值是auditNum>fltNum?auditNum-fltNum:0,那么该如何做呢?自己又摸索了一下,参考如下sql,在一条语句中完成,当然你也可以再插入后对数据表进行update。

insert into audit(auditDate,invNum,fltNum,auditNum,missNum,invType) select * from (select current_date)tmp1 join (select 1)tmp2 join (select 12)tmpFlt join (select 6)tmpAudit join (select if(tmpAudit.audit-tmpFlt.flt>0,tmpAudit.audit-tmpFlt.flt,0) as miss from (select 12 as flt)tmpFlt,(select 6 as audit)tmpAudit)tmp5 join (select 1)tmp6;

上面的语句和前面基本相同,只是增加了对tmpFlt和tmpAudit这两个子查询的重复查询,降低了时间效率。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

MySql的基本操作以及以后开发经常使用的常用指令

第一章:数据类型和操作数据表 MySQL语句的规范 (1):关键字与函数名称全部大写 (2):数据库名称,表名称,字段名称全部小写 (3):SQL语句必须以分号...

203100
来自专栏北京马哥教育

给linux用户的11个高级MySQL数据库面试问题和答案

1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql>...

28840
来自专栏十月梦想

mysql基础操作实例

之前写过一篇mysql基础指令集合,感觉看指令在一些新手朋友来说有点不爽很容易理解,正好现在自己开始自学mysq就把这里基础的指令使用代码展示一下,希望能帮...

11430
来自专栏一英里广度一英寸深度的学习

SQL 内连接,外连接(左外连接、右外连接)

语句:select * from a_table a inner join b_table bon a.a_id = b.b_id;

2.7K30
来自专栏Hongten

python开发_python操作mysql数据库

如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装

11530
来自专栏Netkiller

Spring data 如何定义默认时间与日期

本文节选自《Netkiller Java 手札》 作者:netkiller, 出处:http://www.netkiller.cn/java/index.htm...

41850
来自专栏Java成神之路

Oracle学习笔记_01_SQL初步

   DML: Data Manipulation Language        数据操纵语言 DDL: Data Definition Languag...

8730
来自专栏LanceToBigData

MySQL(八)之DML

昨天晚上很晚的时候才写完MySQL的常用函数,今天给大家讲一下MySQL的DML。接下来让我们直接来学习了,今天感冒了。身体很难受下午的时候要去买一波药了,不然...

21190
来自专栏猿人谷

Mysql中DDL, DML, DCL, 和TCL是什么?

在一些公司中提交给测试团队的SQL脚本会划分为DDL、DML等,但这些概念到底是如何定义的呢?

12440
来自专栏java 成神之路

聚簇索引和二级索引

49140

扫码关注云+社区

领取腾讯云代金券