【问题标题】:Why use "=+" and "=*" in "WHERE " clause?为什么在“WHERE”子句中使用“=+”和“=*”?
【发布时间】:2013-11-24 16:21:36
【问题描述】:

我在 java 类中有问题相关的数据库连接,我不知道为什么在“WHERE”子句中使用这个“=+”和“=*”。

这是一个例子:

String where = null;
if (isOracleConnectionCache()) {
    where = "ValidInfo.InfoCode = FolderInfo.InfoCode AND ValidInfoGroup.InfoGroup =+ ValidInfo.InfoGroup AND FolderInfo.FolderRSN = ?";
} else {
    where = "ValidInfo.InfoCode = FolderInfo.InfoCode AND ValidInfoGroup.InfoGroup =* ValidInfo.InfoGroup AND FolderInfo.FolderRSN = ?";
}

谁能告诉我?

我有三个问题:

(1)“*”和“+”号是什么意思?

(2) 这些=+=* 如何在 WHERE 子句中工作?

(3)与两张表比较如何?

【问题讨论】:

  • 那么这是 Oracle OR MySQL 还是两者通用?
  • SQL Server *= Operator?的可能重复
  • @FrankSchmitt 它是如何重复的?
  • 因为链接到的问题是关于 =* 运算符的。
  • @FrankSchmitt - 但它不包括 =+ 运算符。尽管我强烈怀疑这无论如何都不是真正的运营商。而x =+ y 只是被视为x = (+y)

标签: java mysql sql database oracle


【解决方案1】:

因此,正如其他人已经解释的那样,SQL Server 中的 =* 运算符表示外连接。

然而,在 Oracle 中,=+ 根本不是一个运算符。看来ValidInfoGroup.InfoGroup =+ ValidInfo.InfoGroup实际上被解析为ValidInfoGroup.InfoGroup = (+ ValidInfo.InfoGroup),其中+是一元身份运算符。

由于此代码似乎是尝试根据所使用的数据库编写外连接,因此在 Oracle 中使用时它是不正确的 - 它实际上是在执行普通连接。用 Oracle 的自定义语法编写此条件的正确方法是 ValidInfoGroup.InfoGroup = ValidInfo.InfoGroup (+)

使用 ANSI SQL 连接语法来指示外连接可能会更好,我相信这样可以消除测试正在使用的数据库的需要。

感谢 Martin 和 Nicholas 对其他答案的帮助。

【讨论】:

    【解决方案2】:

    =* 在 SQL Server 中执行 OUTER JOIN

    更新

    (+) = 在 Oracle 中进行 OUTER JOIN

    我不知道 =+ 对混乱有什么抱歉

    【讨论】:

    • Oracle 中的一个简短实验似乎表明这是不正确的。能否提供文档参考?
    • =*标准 SQL 中没有 OUTER JOIN。它在 SQL Server 中已弃用 right outer join 语法。
    • @DaveCosta (+) 确实是(过时的)Oracle 外连接语法,请参阅docs.oracle.com/html/E26088_01/queries006.htm
    • @FrankSchmitt - 但在括号中。问题中的代码是ValidInfoGroup.InfoGroup =+ ValidInfo.InfoGroup
    • @FrankSchmitt - 不。当答案断言"=+" does OUTER JOIN in Oracle
    【解决方案3】:

    这不过是 Oracle 和 MS-SQL 中的外连接让我们假设我删除了一个表记录,并且对应的值为 NULL,所以当您与 == 进行比较时,据我所知,它会产生问题,因此我们可以使用 Outer像你在你的问题中提到的那样加入。

    【讨论】:

    • 我尝试在 Oracle 中使用 =+ 作为运算符进行一些联接。在我的尝试中,它不能作为外部连接。您能否提供一个示例或文档链接来解释该运算符的使用?它似乎是 Oracle SQL 中的有效运算符,但到目前为止,我看不出它与普通的 = 运算符有何不同。
    • @DaveCosta - 可能只是=,然后是一元+
    • 我在我的应用程序中使用的和上面提到的一样
    • This is nothing but Outer Join in Oracle 不,=+ 运算符不是有效的 Oracle 运算符,与外连接无关。 Oracle 中外连接(不是 ANSI SQL)的指示将是列名,后跟 (+) 运算符。条件 col =+ colcol =- col 将起作用,因为这些条件中的加号或减号被视为一元算术运算符,而条件 col =* col 将失败。
    • == 在 SQL 中无效。 不是等于运算符。
    猜你喜欢
    • 2013-11-23
    • 2013-04-06
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多