暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 外部连接内部解码语法

ASKTOM 2020-09-21
220

问题描述

嗨,汤姆,

您能否阐明为什么以下简单sql返回结果?

select 
 a.dummy,
 b.dummy,
 decode ( a.dummy, 'X', null, b.dummy ) 
from
 dual a,
 dual b
where
 decode ( a.dummy, 'X', null, b.dummy (+) ) = a.dummy
;
复制


起初它看起来像满足null = 'X' 条件。在decode中的默认值之后使用 () 是对整个decode的左外连接的等效吗?以下查询是否与前一个查询等效?

select
 a.dummy,
 b.dummy,
 decode ( a.dummy, 'X', null, b.dummy ) 
from
 dual a left outer join dual b on decode ( a.dummy, 'X', null, b.dummy ) = a.dummy
;
复制

专家解答

是的,这两个语句是等效的。

请记住,外部联接始终返回外部表中的所有行。它从内部表中返回满足连接条件的行。

在这些查询中,A是外部表,因此您将在输出中从此表获得一行。

然后,您将从B获得行,其中:

解码 (a.dummy,'X',null,b.dummy ( ) )

是真的。这将X映射到null,所以条件是:

null = 假人

这是未知的。因此,您不会从B获得任何行。

这与您得到的结果相匹配:

select 
 a.dummy a_dum,
 b.dummy b_dum,
 decode ( a.dummy, 'X', null, b.dummy ) 
from
 dual a,
 dual b
where 解码 (a.dummy,'X',null,b.dummy ( ) ) = a.dummy;

A_DUM    B_DUM     DECODE(A.DUMMY,'X',NULL,B.DUMMY)   
X                
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论