健全性检查: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 条件?

SQLAlchemy - WHERE 子句中的子查询

Oracle SQL,在 SELECT 标头中的子查询中返回唯一(最大)行(在 FROM、WHERE 之前)

Oracle 触发器 触发器应用场景--复杂的安全性检查

Oracle子查询