加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SQL合并具有相同维度的多个表的各个字段

(2018-11-24 19:56:21)
标签:

oracle

it

sql

数据分析

分类: 数据仓库

 

 

BY JSC_KEVIN

需求场景

TB1                   TB2                TB3

project

budget

p1

100

p2

200

project

benefit

p1

10

p2

20

project

days

p1

1

p3

3

 

 

 

现在需要用SQL把上述3个表的各个项目属性合并到一张表,如下图:

project

budget

benefit

days

p1

100

10

1

p2

200

20

p3

3

实现方法

以下SQL代码以Oracle数据库作为运行环境

方法一:使用全连接FULL JOIN

select coalesce(TB1.project, TB2.project, TB3.project) as project

      ,TB1.budget

      ,TB2.benefit

      ,TB3.days

from TB1

full join TB2 on TB1.project = TB2.project

full join TB3 on TB1.project = TB3.project or TB2.project = TB3.project


                 这里coalesce函数的作用是:当TB1.project为null时候,取TB2.project的值,当TB2.project的值为null的时候,取TB3.project的值。

方法二:使用左连接LEFT JOIN

WITH TB0 as(

select distinct project from(

   select project from TB1

   union all

   select project from TB2

   union all

   select project from TB3))


select TB0.project

      ,TB1.budget

      ,TB2.benefit

      ,TB3.days

from TB0

left join TB1 on TB0.project = TB1.project

left join TB2 on TB0.project = TB2.project

left join TB3 on TB0.project = TB3.project

 

两种方法的对比

1、当表比较多字段比较多的时候,方法一会报奇怪的错误,报错编码为ORA-00600

2、方法二运行速度比方法一快很多,特别是当表特别多的时候会比较明显;

 

综上所述,推荐使用方法二


如需沟通讨论,可联系QQ2622487640,本文版权归智扬信达所有,转载请注明出处。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有