前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL如何将select子查询结果横向拼接后插入数据表中

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

作者头像
恋喵大鲤鱼
发布2018-08-03 14:36:20
7.7K0
发布2018-08-03 14:36:20
举报
文章被收录于专栏:C/C++基础

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

代码语言:javascript
复制
+-----------+------------+------+-----+-------------------+-------+
| 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语句如下:

代码语言:javascript
复制
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;

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
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这两个子查询的重复查询,降低了时间效率。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年07月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档