在 Oracle SQL 中,除了外连接之外,where 子句中的 (+) 运算符的目的是啥?
Posted
技术标签:
【中文标题】在 Oracle SQL 中,除了外连接之外,where 子句中的 (+) 运算符的目的是啥?【英文标题】:What is the purpose of (+) operator in a where clause, other than outer joins, in Oracle SQL?在 Oracle SQL 中,除了外连接之外,where 子句中的 (+) 运算符的目的是什么? 【发布时间】:2020-11-12 15:45:43 【问题描述】:我有一些非常旧的 Oracle SQL 代码需要查看,如下所示,并试图了解 (+)
运算符在第一次使用后在 where
子句中的作用
select *
from table_a a,
table b b
where
a.id = b.id (+)
and b.seq_nb (+) = 1
and b.type_cd (+) = 'DOLLR'
我认为(+)
是外连接等价物,所以
from table_a a,
table b b
where
a.id = b.id (+)
将与
相同from table a a left outer join table b b on a.id=b.id
那么你怎么能有如下硬编码变量的外部连接呢?
b.seq_nb (+) = 1
and b.type_cd (+) = 'DOLLR'
任何帮助将不胜感激,谢谢!
【问题讨论】:
请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:***.com & 标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。 这能回答你的问题吗? Difference between Oracle's plus (+) notation and ansi JOIN notation? LEFT JOIN ON 返回 INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN ON 的一部分,始终知道您想要什么 INNER JOIN ON。 ON 接受任何条件,而不仅仅是两列相等。 (+) 可以表示 ON 的某些情况。始终阅读手册和您正在使用的功能的介绍,更不用说您遇到问题的功能了。 【参考方案1】:同理:
select *
from table_a a
left outer join table_b b
on a.id = b.id
and b.type_cd = 'DOLLR'
and b.seq_nb = 1
有时也称为“过滤外连接”。
相当于派生表的外连接:
select *
from table_a a
left outer join (
select *
from table_b
where b.type_cd = 'DOLLR'
and b.seq_nb = 1
) b on a.id = b.id
【讨论】:
以上是关于在 Oracle SQL 中,除了外连接之外,where 子句中的 (+) 运算符的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章