健全性检查:Oracle DB 的 WHERE 子句中的 (+) 运算符? [复制]
Posted
技术标签:
【中文标题】健全性检查:Oracle DB 的 WHERE 子句中的 (+) 运算符? [复制]【英文标题】:Sanity Check: (+) Operator in WHERE Clause for Oracle DB? [duplicate] 【发布时间】:2011-07-15 08:35:39 【问题描述】:可能重复:Oracle “(+)” Operator
所以我得到了一个包含以下内容的脚本:
SELECT BLAH
FROM A_TABLE T1, A_TABLE T2, A_TABLE T3
WHERE T2.FIELD_1(+) = T1.FIELD_1
AND T3.FIELD_1(+) = T2.FIELD_1
... etc a few more AND clauses that do that same thing
我需要将此脚本转换为 MSSQL Server,但我不知道该操作员在做什么。这可能是某种错字吗?
【问题讨论】:
我认为这是 Oracle 所说的左连接,(+)
表示即使 T2 与 T1 不匹配,您也可以获得所有 T2。我可能会倒退。
Oracle "(+)" Operator 的可能副本。另外:***.com/questions/2425960/…
【参考方案1】:
这是用于外部连接的旧 Oracle 语法。您应该改用 ANSI 连接语法:
SELECT BLAH
FROM A_TABLE T1
LEFT JOIN A_TABLE T2 ON T2.FIELD_1 = T1.FIELD_1
LEFT JOIN A_TABLE T3 ON T3.FIELD_1 = T2.FIELD_1
WHERE ... etc
【讨论】:
【参考方案2】:这是 LEFT JOIN 的 Oracle 表示法。
意思是
SELECT BLAH
FROM A_TABLE T1
LEFT JOIN A_TABLE T2 ON T2.FIELD_1 = T1.FIELD_1
LEFT JOIN A_TABLE T3 ON T3.FIELD_1 = T2.FIELD_1
... etc a few more AND clauses that do that same thing
(+) 放在可选的一侧。另请阅读:
http://www.dba-oracle.com/art_sql_iso_99.htm Difference between Oracle's plus (+) notation and ansi JOIN notation?【讨论】:
以上是关于健全性检查:Oracle DB 的 WHERE 子句中的 (+) 运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 查询优化器是不是将*** where 子句应用于子查询或视图?
如何在 Laravel 的 DB 查询中编写两个 where 条件?