【问题标题】:Oracle SQL: Meaning of (+)= in WHERE clauseOracle SQL:WHERE 子句中 (+)= 的含义
【发布时间】:2016-07-20 06:25:09
【问题描述】:

我有一个关于在Oracle数据库的where子句中使用(+)=的问题;

  1. a. id= b.id(+)

这是否意味着 a.id=b.id 的 b 上的左连接是左连接,对吗?

  1. a.Job_Type(+) = 'Manager'

我不明白他为什么在这里使用(+)=,而不是a.Job_Type = 'Manager',它们是一样的吗?

【问题讨论】:

  • (+) 的模糊性是我推荐使用它的原因。 1) INNER/LEFT/RIGHT 更加明确,2) 它将您的加入标准与过滤标准分开,3) 它更灵活(即尝试使用 (+) 表示 UPPER(x) = UPPER(y)x LIKE y
  • 请参阅this answer 以获取示例说明。不过,第一条评论中的链接可能是最好的重复目标。
  • @Mr.Llama:不仅你不建议使用它。甚至甲骨文也是如此。

标签: sql oracle outer-join


【解决方案1】:

它的工作方式类似于 LEFT JOINRIGHT JOIN,具体取决于该列所属的表,您可以阅读不同类型的 JOINS here

在您的情况下 (+) 将返回具有别名 a 的表中的所有记录,并且仅返回具有别名 b 的表中与表别名相交的那些记录 一个。

【讨论】:

    【解决方案2】:

    (+) 标识正在外部连接的表。按照我被教导的方式,(+) 表示表中缺少行,必须为其添加新的 NULL 行。

    如果您查看在 LEFT OUTER JOIN 成为 ANSI 标准的一部分之前各种数据库支持的备用左外连接语法,专有运算符通常应用于“缺失”行的表。 DB2 还支持外连接的 (+) 运算符,方式与 Oracle 相同。

    回答Old Style Oracle Outer Join Syntax - Why locate the (+) on the right side of the equals sign in a Left Outer join?

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2018-10-21
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多