文档章节

SQL --分支取数据

求是科技
 求是科技
发布于 2015/10/19 17:14
字数 341
阅读 69
收藏 0
点赞 0
评论 0

需求分析

1.写一条SQL语句,返回一个list,list中存放的对象有个属性是type(有三种情况),需求:根据这个type关联不同的表。

常规思路

先写SQL取到这个list,在判断list中每个对象的type,再根据不同的type再去数据库表里查询一次。

常规思路弊端

如果返回的是一个对象,这样分步做是没有问题的;但是这个地方返回的是一个list,在外层的list里面套个循环来判断每个对象的type,在根据type不同,分别去联合不同的表查数据,这种想法很明显的不是最佳方案,假设list的数据成千上百条,

在套个for循环,查询时间可想可知。

解决思路

mysql里面的case when

示例如下

SELECT
    tm.LINK_CONTENT_ID,
    tm.LINK_CONTENT_TYPE,
    tm.SEND_USER_ID,
    tui.USER_IMG,
    tui.NICKNAME,
    tm.ADD_TIME,
    tm.LINK_OBJ_ID,
    tm.LINK_OBJ_IMG,
    tm.LINK_OBJ_NAME,
    tm.MESSAGE_CONTENT,
    tm.RECEIVE_USER_ID,
    tm.SUPER_CMMT_ID,
    tm.SUPER_CMMT_CONTENT,
    tm.ROOT_CMMT_ID,
    tm.READ_FLAG,
    CASE
WHEN LINK_CONTENT_TYPE = '01' THEN
    (
        SELECT
            CONCAT(
                (
                    SELECT
                        t_person.COMPANY
                    FROM
                        t_person
                    WHERE
                        t_person.PERSON_ID = tm.LINK_OBJ_ID
                ),
                '||',
                (
                    SELECT
                        CONCAT(
                            (
                                SELECT
                                    t_person.JOB_POSITION
                                FROM
                                    t_person
                                WHERE
                                    t_person.PERSON_ID = tm.LINK_OBJ_ID
                            )
                        )
                )
            )
        FROM
            t_person
        WHERE
            t_person.PERSON_ID = tm.LINK_OBJ_ID
    )
WHEN LINK_CONTENT_TYPE = '02' THEN
    (
        SELECT
            t_hr.MOTTO
        FROM
            t_hr
        WHERE
            t_hr.HR_ID = tm.LINK_OBJ_ID
    )
WHEN LINK_CONTENT_TYPE = '03' THEN
    (
        SELECT
            t_enterprise.ENTERPRISE_SUMMARY
        FROM
            t_enterprise
        WHERE
            t_enterprise.ENTERPRISE_ID = tm.LINK_OBJ_ID
    )
ELSE
    ''
END AS linkObjInfo
FROM
    t_message tm,
    t_user_info tui
WHERE
    tm.SEND_USER_ID = tui.USER_ID
AND tm.RECEIVE_USE_FLAG = 0
AND tm.RECEIVE_USER_ID = 1000000001
AND tm.SEND_USER_ID != 1000000001
AND LINK_CONTENT_TYPE IN ('01', '02', '03')
ORDER BY
    tm.ADD_TIME DESC
LIMIT 20


© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 89
博文 453
码字总数 228281
作品 0
成都
后端工程师
个人人民币定期存款-存本取息Personal CNY Time Deposit – Schedule

存本取息定期储蓄是指个人将属于其所有的人民币一次性存入较大的金额,分次支取利息,到期支取本金的一种定期储蓄。Scheduled Interest Withdrawal is a kind of fixed savings deposit; the...

guanji1989
2014/03/10
0
0
springboot(五):spring data jpa的使用

在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spring data jpa 开发时,发现国...

ityouknow
2016/09/28
0
0
SQL Server 2005基础知识整理

ACID:指数据库事务正确执行的四个基本要素缩写:1.原子性2.一致性3.隔离性4.持久性 2.数据库对象:表(table) 视图(view) 存储过程(stored procedure) 函数(function)索引(index) ...

IceRainYWC
2012/09/12
0
1
Mysql数据库开发之mycat分表分库如何做?

Mycat分表分库虽然能解决大表对数据库系统的压力,但也有一些不利,因此Mycat分表分库要先解决的问题是,分不分库,分哪些库,什么规则分,分多少分片。那么究竟是怎么分的呢? 1、能不分就不...

老男孩Linux培训
05/31
0
0
Mycat分表分库怎么分?Mysql DBA学习

Mycat分表分库虽然能解决大表对数据库系统的压力,但也有一些不利,因此Mycat分表分库要先解决的问题是,分不分库,分哪些库,什么规则分,分多少分片。那么究竟是怎么分的呢? 1、能不分就不...

mo默瑶
05/31
0
0
Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

Oracle数据文件在有数据的情况下能自动扩展,却不能自动收缩,造成存储空间的浪费。 如果直接修改数据文件的大小,可能会遇到如下错误:ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据...

TreasureWe
2016/02/17
75
0
【原创】mysqlslap 使用总结

mysqlslap 可以用于模拟服务器的负载,并输出计时信息。其被包含在 MySQL 5.1 的发行包中。测试时,可以指定并发连接数,可以指定 SQL 语句。如果没有指定 SQL 语句,mysqlslap 会自动生成查...

摩云飞
2013/08/14
0
5
实战演练:洞若观火--治堵之道在清源

1 观察:把问题说清楚 在我印象中,DBA 都是很明事理的人,因为这个职业经常要干的一件事情就是:“把问题说清楚,把规矩讲明白”。这是一项软技能,不管是问题分析过程中与同行沟通,还是最...

技术小能手
07/09
0
0
Ali-HBase的SQL实践与改进

2017云栖大会Hbase专场,阿里巴巴技术专家天穆带来Ali-HBase的SQL实践与改进的演讲。本文主要从为什么需要SQL开始谈起,进而讲解了SQL on Hbase,接着着重分享了Ali-Hbase SQL的优化与改进,...

云迹九州
01/11
0
0
VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器 安装数据库服务器 分别在三台机器上安装SQL2008运行安装程序 图示3.1 点击确定继续 图示3.2 使用全新安装 图示3.3 图示3.4 输入密钥继续 图示3.5 接受条款 图示3.6 进行...

sunx990
2016/02/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
2分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
5分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
12分钟前
7
0
开源 java CMS - FreeCMS2.8 会员管理

项目地址:http://www.freeteam.cn/ 会员组管理 会员管理 会员管理 从左侧管理菜单点击会员管理进入。 添加会员 在会员列表下方点击“添加”按钮。 填写相关属性后点击“保存”按钮即可。 编...

freeteam
13分钟前
0
0
bboss升级至 v5.0.6.8版本,改善对Elasticsearch SQL 的支持

v5.0.6.8功能改进如下: (1)持久层支持支持Elasticsearch SQL,使用参考文档:玩转Elasticsearch SQL功能 (2)解决持久层/elasticsearch模板变量解析多层级不起作用问题 (3)完善国际化功能 (4...

linux-tao
14分钟前
0
0
扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
20分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
26分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
27分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部