今天公司的业务需求中,遇到一个很郁闷的情况。

有一个申请记录,缺少申请原因的字段。

我以为很简单,采用left jion 很容易获取到申请原因。

SELECT a.*,b.RealName,c.DeptName,d.FlowApplyNote as n1,e.FlowApplyNote as n2, f.FlowApplyNote as n3 ,g.FlowApplyNote as n4, h.FlowApplyNote as n5 FROM `AttApplyRecords` as a LEFT JOIN `SysUsers` as b ON a.FlowApplyUserId =
b.UserId LEFT JOIN `SysDepts` as c ON c.DeptId = b.DeptId LEFT JOIN `FlowApplyLeaves` as d ON a.FlowApplyId = d.FlowApplyId and a.FlowId = d.FlowId and d.FlowApplyNote is not null LEFT JOIN `FlowApplyOffDays` as e ON a.FlowApplyId = e.FlowApplyId and a.FlowId = e.FlowId and e.FlowApplyNote is not null LEFT JOIN `FlowApplyNotAtts` as f ON a.FlowApplyId = f.FlowApplyId and a.FlowId = f.FlowId and f.FlowApplyNote is not null LEFT JOIN `FlowApplyOverTimes` as g ON a.FlowApplyId = g.FlowApplyId and a.FlowId = g.FlowId and g.FlowApplyNote is not null LEFT JOIN `FlowApplyTravels` as h ON a.FlowApplyId = h.FlowApplyId and a.FlowId = h.FlowId and h.FlowApplyNote is not null WHERE a.ApplyStatus = 2 ORDER BY b.RealName DESC

产生的结果如下

后面的n1 n2 n3 n4 n5 不好取。他们应该是申请理由。

于是想到合并字段。mysql中合并可以采用concat 。但是这要求字段不能为Null,否则直接返回Null

于是又抓取mysql的 ifNULL函数。成功实现上门的效果。

于是产生下面的是sql语句

SELECT a.*,b.RealName,c.DeptName,IFNULL(d.FlowApplyNote,'') as n1, IFNULL(e.FlowApplyNote,'') as n2, IFNULL(f.FlowApplyNote,'') as n3 , IFNULL(g.FlowApplyNote,'') as n4, IFNULL(h.FlowApplyNote,'') as n5,concat(n1,n2,n3,n4,n5) as n FROM `AttApplyRecords` as a LEFT JOIN `SysUsers` as b ON a.FlowApplyUserId = 
b.UserId LEFT JOIN `SysDepts` as c ON c.DeptId = b.DeptId LEFT JOIN `FlowApplyLeaves` as d ON a.FlowApplyId = d.FlowApplyId and a.FlowId = d.FlowId and d.FlowApplyNote is not null LEFT JOIN `FlowApplyOffDays` as e ON a.FlowApplyId = e.FlowApplyId and a.FlowId = e.FlowId and e.FlowApplyNote is not null LEFT JOIN `FlowApplyNotAtts` as f ON a.FlowApplyId = f.FlowApplyId and a.FlowId = f.FlowId and f.FlowApplyNote is not null LEFT JOIN `FlowApplyOverTimes` as g ON a.FlowApplyId = g.FlowApplyId and a.FlowId = g.FlowId and g.FlowApplyNote is not null LEFT JOIN `FlowApplyTravels` as h ON a.FlowApplyId = h.FlowApplyId and a.FlowId = h.FlowId and h.FlowApplyNote is not null WHERE a.ApplyStatus = 2 ORDER BY b.RealName DESC

但是提示错误。

困扰了一会,又想到Mysql 的二次查询。

于是最后 的sql语句是

select *,concat(t.n1,t.n2,t.n3,t.n4,t.n5) as FlowApplyNote from (SELECT a.*,b.RealName,c.DeptName,IFNULL(d.FlowApplyNote,'') as n1, IFNULL(e.FlowApplyNote,'') as n2, IFNULL(f.FlowApplyNote,'') as n3 , IFNULL(g.FlowApplyNote,'') as n4, IFNULL(h.FlowApplyNote,'') as n5 FROM `AttApplyRecords` as a LEFT JOIN `SysUsers` as b ON a.FlowApplyUserId =
b.UserId LEFT JOIN `SysDepts` as c ON c.DeptId = b.DeptId LEFT JOIN `FlowApplyLeaves` as d ON a.FlowApplyId = d.FlowApplyId and a.FlowId = d.FlowId and d.FlowApplyNote is not null LEFT JOIN `FlowApplyOffDays` as e ON a.FlowApplyId = e.FlowApplyId and a.FlowId = e.FlowId and e.FlowApplyNote is not null LEFT JOIN `FlowApplyNotAtts` as f ON a.FlowApplyId = f.FlowApplyId and a.FlowId = f.FlowId and f.FlowApplyNote is not null LEFT JOIN `FlowApplyOverTimes` as g ON a.FlowApplyId = g.FlowApplyId and a.FlowId = g.FlowId and g.FlowApplyNote is not null LEFT JOIN `FlowApplyTravels` as h ON a.FlowApplyId = h.FlowApplyId and a.FlowId = h.FlowId and h.FlowApplyNote is not null WHERE a.ApplyStatus = 2 ORDER BY b.RealName DESC ) t

经过这些折腾,对以前的表设计,颇有怨言。这样的一个sql,增加了复杂度,还没写注释,让人怎么看啊。

Mysql的收获的更多相关文章

  1. 使用免安装压缩包安装MySQL

    OS:Windows 10家庭中文版 MySQL:mysql-5.7.20-winx64.zip 作者:Ben.Z 参考链接: Installing MySQL on Microsoft Window ...

  2. MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  4. express实现前后端通信上传图片,存储数据库(mysql)傻瓜教程(三)完结篇

    终于完成了所有自己想要的功能(鼓励下自己),虽然还是很简陋,但是还是挺有满足感的,哈哈. 附上前两篇的链接: 第一篇 第二篇 进入正题,在第二篇里面已经完成了连接数据库,并且实现了对数据库的增删改查, ...

  5. 大数据系列(5)——Hadoop集群MYSQL的安装

    前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ...

  6. MySQL调优系列_日志分析

    前言 本篇主要总结一下MySQL数据库的几种日志,用于日常维护过程中问题解决和性能优化等,稍显基础,日常积累之用. 文章的部分内容会将MySQL数据库和SQL Server数据库部分内容做一个对比,非 ...

  7. JSP连接MySQL数据库问题

    之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...

  8. MySQL命令行下执行.sql脚本详解

    本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sq ...

  9. mysql binlog日志优化及思路

    在数据库安装完毕,对于binlog日志参数设置,有一些参数的调整,来满足业务需求或使性能最大化.Mysql日志主要对io性能产生影响,本次主要关注binlog 日志. 查一下二进制日志相关的参数    ...

随机推荐

  1. hdu_5616_Jam's balance(暴力枚举子集||母函数)

    题目连接:hdu_5616_Jam's balance 题意: 给你一些砝码,和一些要被称出的重量,如果这些砝码能称出来输出YES,否则输出NO 题解:我们想想,这题求组合方式,我们这里可以直接用母函 ...

  2. 在web项目中使用cxf开发webservice,包含spring支持

    本文主要介绍了,如何使用cxf内置的例子,学会开发webserivce,在web项目中使用,且包含spring支持. webserivce的开发可以使用cxf或者axis,好像还有httpclient ...

  3. Android Camera Api的心得

    (一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈. (二) 正文1. CameraCamera是Android framework ...

  4. UIImage将图片写入本地相册

    UIImageWriteToSavedPhotosAlbum(<#UIImage *image#>, <#id completionTarget#>, <#SEL com ...

  5. ViewController加载顺序与self.view

    转载自:http://blog.csdn.net/ishaoc/article/details/42172749   ViewController的加载顺序如下   从Stroyboard和xib中加 ...

  6. android Service Activity三种交互方式(付源码)(转)

    android Service Activity三种交互方式(付源码) Android应用服务器OSBeanthread  android Service Binder交互通信实例 最下边有源代码: ...

  7. opcode修改

    Smali: if-eqz opcode 38 if-nez opcode 39 SO: CMP R0,#0 00 28 CMP R0,#1 01 28

  8. 使用Three.js渲染Sketchup导出的dae

    打算做个轮盘游戏,直接上3D吧. 第一步:制作模型 3DMax和Maya下载和破解比较麻烦, 就用之前的Sketchup来试试吧. 最后效果图: 俯视图 仰视图 制作步骤: 1 先画一个圆 2 从圆心 ...

  9. adb shell 命令详解,android

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  10. webapp之路--之ios上图标

    以前我们用过favicon在浏览器给网站进行身份标识,用法如下: <link href="http://image.feeliu.com/web/favicon.ico" r ...