【问题标题】:NUMBER functions (+) [duplicate]NUMBER 个函数 (+) [重复]
【发布时间】:2014-02-09 19:15:27
【问题描述】:

我正在浏览一些代码并遇到一个视图,我想知道 WHERE 语句的哪一部分在做什么,看起来是这样的。

receipt_note.receipt_num(+) = receipt_data.receipt_num

receipt_num 是表中的一个 NUMBER。我只是不知道 (+) 会在这里做什么。是在那个数字上加 1,就像在编码中你会做变量 ++

【问题讨论】:

  • 这是在 Oracle 中编写外连接的旧方法
  • 它已经过时了,Oracle 推荐使用 ANSI 连接语法,但我认为它不会被 Oracle 弃用,并且会在未来的版本中完全删除。如果您个人更喜欢这种语法,则可以使用它。如果您不使用最新的 Oracle 数据库版本,有时建议您使用旧的 Oracle 语法,因为 Oracle 中有几个与 ANSI 连接语法相关的错误。例如,如果查询是使用 ANSI 连接语法编写的,则无法在实体化视图上使用 FAST REFRESH。不知道这段时间有没有修复这个bug,我还没测试。
  • 我刚刚检查了 Oracle 页面。使用 FAST REFRESH 的 MATERIALIZED VIEW 不能使用 ANSI 连接语法。 Oracle 不认为这是一个错误!如果您有权访问 Oracle 支持,请参阅 Oracle 文档 ID 1372720.1 了解详细信息。

标签: sql oracle


【解决方案1】:

(+) 是(旧的)outer join operator in Oracle。它指定了receipt_note 表的receipt_num 列和receipt_data 表之间的外连接。

此语法已过时;新查询应该使用OUTER JOIN,因为它更具可读性。

【讨论】:

  • @Ben 如果我知道其中任何一个,我会知道的。很抱歉,我没有广泛地重复检查我知道答案的每个问题。我认为这是海报的责任。随意将自己标记为重复。拥有超过 20k 的代表,你可能是建设性的,而不是批判性的。
  • @Twinkles 我确实提到它很旧,但你是对的;相应地编辑答案。谢谢。
  • 我做了 :-)... 在我发表评论前 20 秒。抱歉,并不是说它会遇到这么糟糕的情况,但我已经看到这个问题很多次了,我有点厌倦了。
  • 在这种情况下,如果有数字重复怎么办。假设receipt_note.receipt_num 有222 两次,receipt_data.receipt_num 只有一次。这是否会为每个重复的数字创建 2 个连接记录?
  • @Ben 好的。我不是 SQL 问题(通常是 C#/C++)的常客,而且我以前从未见过这种情况。如果我知道重复,或者我在研究答案时遇到了重复,我会相应地发布,但我没有时间特意检查每个答案。幸运的是,在一个网站上,这个大某人很可能会抓住它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2017-03-24
相关资源
最近更新 更多