场景:Oracle中SQL优化:left join查询语句,多个字段关联同一个表有关问题

Oracle中SQL优化:left join查询语句,多个字段关联同一个表问题

tabA表,

此表字段:

code1,code2,code3

tabB表:

此表字段:

id,code,codeName

查询:

select

b1.codeName,

b2.codeName,

b3.codeName

from tabA a

left join tabB b1

on a.code1=b1.code

left join tabB b2

on a.code2=b2.code

left join tabB b3

on a.code3= b3.code

where 1=1

这种查询,对于tabB表扫描次数太频繁,请问如何更改比较合理。

------解决思路----------------------

表A三个字段看起来好像一样啊,为什么不用一个字段就行?

------解决思路----------------------

列转行,再行转列,B表访问次数少了

但是至于那个执行时间快,不确定,具体执行下或看一下执行计划吧

SELECT MAX(DECODE(A.CONAME,'code1',B.codeName)),

MAX(DECODE(A.CONAME,'code2',B.codeName)),

MAX(DECODE(A.CONAME,'code3',B.codeName))

FROM

(select code1 as code,'code1' as colname,rowid as id from TABLEA

union all

select code2 as code,'code2' as colname,rowid as id from TABLEA

union all

select code3 as code,'code3' as colname,rowid as id from TABLEA) A,TABLEB B

WHERE A.CODE=B.CODE

GROUP BY A.ID

------解决思路----------------------

这是要干嘛,看着都不通

------解决思路----------------------

引用:这很简单嘛,比如一个单据表有 批准人,审核人,复审核人

而这些人肯定都是对应的员工表。那么查询的时候自然就要关联一下,只是这个sql关联的有些多了。

如果是这样的表,考虑一下改成由person_name,person_identity和document_id三个字段组成的表如何,类似的你的表也可以改改嘛。只是个想法,可以试试

------解决思路----------------------

b表很大吗?b.code应该有唯一索引的吧,这样应该问题也不大

------解决思路----------------------

引用:这很简单嘛,比如一个单据表有 批准人,审核人,复审核人

而这些人肯定都是对应的员工表。那么查询的时候自然就要关联一下,只是这个sql关联的有些多了。

要么重新设计表,要么行列转换。

------解决思路----------------------

select

(case when a.code1=b1.code then b1.codename end),

(case when a.code1=b1.code then b1.codename end),

(case when a.code1=b1.code then b1.codename end)

from tabA a

left join tabB b1

on (a.code1=b1.code or a.code2=b1.code or a.code3= b1.code)

------解决思路----------------------

4楼的方法可以测一下,速度有没有提升.

楼主原本的语句,如果每次经过where筛选后,数据量不大,在tabB的code上加个索引就差不多了

------解决思路----------------------

--如果满足要求的话 楼主看看这个

SELECT code1, code2, code3, wm_concat(t2.name)

FROM t t1

LEFT JOIN tb t2

ON (t1.code1 = t2.code OR t1.code2 = t2.code OR t1.code3 = t2.code)

GROUP BY code1, code2, code3

Oracle一个语句多个left,oracle 多个 left join相关推荐

  1. oracle更改语句用 怎么站位,Oracle 数据库如何修改控制文件的位置

    数据库通过控制文件保持数据库的完整性,一旦控制文件被破坏数据库讲无法启动,因此建议采用多路控制文件或者备份控制文件的方法. 控制文件是数据库建立的时候自动生成的二进制文件,只能通过实例进行修改,如果手 ...

  2. oracle一个表空间超出32g,Oracle表空间超出32G的解决方法

    刚才导入一个17.5G的dmp文件,3800W行,导了大概70分钟后, . importing XXXX's objects into XXXX . . importing table         ...

  3. Oracle+sql+取年度,oracle SQL语句取本周本月本年的数据

    --国内从周一到周日 国外是周日到周六 select to_char(sysdate-1,'D') from dual;--取国内的星期几 去掉减一取国外的星期 --取本周时间内的数据 select ...

  4. oracle中的with的用法,oracle with 话语的用法

    oracle with 语句的用法 在oracle中,select 查询语句,可以使用with,就是一个子查询,oracle 会把子查询的结果放到临时表中,可以反复使用 例子:注意,这是sql语句,不 ...

  5. cs oracle语句跟踪,Oracle执行语句跟踪 使用sql trace实现语句追踪

    1.SQL_Plus自动跟踪: set autotrace on explain          // 显示执行计划 set autotrace traceonly explain // 仅显示执行 ...

  6. oracle 判断11位数字,45个非常有用的 Oracle 查询语句小结

    日期/时间 相关查询 1.获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 "SYSDATE"来指定查询的日期. SELECT TRUNC ( ...

  7. oracle循环语句loop,oracle循环语句loop

    Oracle循环语句的写法有哪些呢 如果您对Oracle循环语句方面感兴趣的话,不妨一看. loop循环: 1. create or replace procedure pro_test_loop i ...

  8. oracle 数据语句优化,oracle 查询语句优化录

    最近,因为发现以前使用的数据查询语句的效率越来越差,导致每次进行大量数据的操作都需要耗一个小时以上.这速度实在是太龟慢了,简直是无法忍受了.本人决定亲自拿把杀猪刀砍向它,好给它颜色瞧瞧.经过一系列的测 ...

  9. Oracle SQL语句执行过程

    前言 QQ群讨论的时候有人遇到这样的问题:where子句中无法访问Oracle自定义的字段别名.这篇 博客就是就这一问题做一个探讨,并发散下思维,谈谈SQL语句的执行顺序问题. 问题呈现 直接给出SQ ...

最新文章

  1. 如何在服务器中找到数据库文件夹,如何在服务器中找到数据库文件
  2. 使用pushMeBaby后台测试远程推送
  3. Android PopupWindow 隐藏软键盘的方法
  4. 32位mysql安装包_MySQL安装指南(CPT103)
  5. 技术实践丨体验量子神经网络在自然语言处理中的应用
  6. STM32H7---高速缓存Cache(一)
  7. 今天没事做了个MBTI职业倾向测试
  8. ANT的安装/配置笔记
  9. 苹果电脑安装计算机一级,苹果电脑安装Win10系统的详细步骤
  10. matlab 凸多边形,matlab练习程序(多边形顶点凹凸性)
  11. kaggle-2美国人口普查年收入50K分类
  12. vscode更改配置文件路径_Visual Studio Code安装和配置
  13. 通过思翼SIYI MK15E回传Realsense D435i 的 RGB图像
  14. 淘宝订单同步方案 - 丢单终结者
  15. 使用plotly画3d立方体
  16. 如何制作GIF表情包,动态GIF怎么做
  17. 想不到验证码背后的故事这么有意思
  18. ENVI系列--使用矢量文件裁剪目标区域
  19. lgb 分类回归 网格搜索调参数 + 数据生成csv
  20. matlab m文件转换为txt,MATLAB两种M文件

热门文章

  1. 详解双频光栅图案的轮廓法(PMP和FTP)
  2. 史上最全鱼骨图分析法
  3. 基站机房:保障通信网络稳定,如何解决安全隐患?
  4. 2018年,人工智能 VS 区块链,谁更牛逼?
  5. 阿尔兹海默病智能诊断
  6. python 栈实现 加减乘除_Python自学笔记,编程中简单的加减乘除
  7. Tensorflow模型优化训练思路
  8. Spring提供的各种工具
  9. 从小白到中级高级软件测试工程师成长路线!--(下篇)
  10. arp miss攻击_详述网络中ARP安全的综合功能