问题描述
嗨,汤姆,
您能否阐明为什么以下简单sql返回结果?
起初它看起来像满足null = 'X' 条件。在decode中的默认值之后使用 () 是对整个decode的左外连接的等效吗?以下查询是否与前一个查询等效?
您能否阐明为什么以下简单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获得任何行。
这与您得到的结果相匹配:
请记住,外部联接始终返回外部表中的所有行。它从内部表中返回满足连接条件的行。
在这些查询中,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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
655次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
625次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
530次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
479次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
475次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
459次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
449次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
405次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
369次阅读
2025-04-15 14:48:05
Oracle数据库Hint大全,31个使用案例,速来下载!
陈举超
343次阅读
2025-04-16 21:25:19