partition outer join

partition outer join   ---

对于员工100101分别和部门表进行outer join 。此时用到right outer join,对于employee表中不匹配的记录,employee_id字段不显示为null,而是显示实际的employee_id的值,而其它的字段则显示为空。

select e.employee_id, e.department_id, d.department_id

  from hr.employees e partition by(employee_id)

 right outer join departments d on e.department_id = d.department_id

 where e.employee_id in (100,101)

 and d.department_id in (10,20,90)

 

结果为

EMPLOYEE_ID

DEPARTMENT_ID

DEPARTMENT_ID

100

 

10

100

 

20

100

90

90

101

 

10

101

 

20

101

90

90

 

相当于以下的语句

select nvl(e.employee_id, 100), e.department_id, d.department_id
  from (select * from hr.employees where employee_id = 100) e
 right outer join departments d on e.department_id = d.department_id
 where d.department_id in (10, 20, 90)
union all
select nvl(e.employee_id, 101), e.department_id, d.department_id
  from (select * from hr.employees where employee_id = 101) e
 right outer join departments d on e.department_id = d.department_id
 where d.department_id in (10, 20, 90)

 

此时的employee_id使用nvl将填充空值,employee_id = 100的过滤条件放在子查询中,若放于外面,由于是先过滤后运行function NVL,则导致以上的结果只显示两条记录,其它记录因为employee_id为空而被过滤了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30821/viewspace-442330/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30821/viewspace-442330/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值