为什么在“WHERE”子句中使用“= +”和“= *”?

时间:2013-11-12 13:29:40

标签: java mysql sql database oracle

我在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)如何与两个表进行比较?

3 个答案:

答案 0 :(得分:6)

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

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

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

使用ANSI SQL连接语法来表示外连接可能会更好,我相信这样就无需测试正在使用哪个数据库。

感谢Martin和Nicholas对其他答案的有益评论。

答案 1 :(得分:2)

=*在SQL Server中进行OUTER JOIN

<强>更新

(+) =在Oracle中进行OUTER JOIN

我不知道= +对于混乱感到抱歉

答案 2 :(得分:0)

这只不过是Oracle和MS-SQL中的外部联接让我们假设我删除了一个表记录并且相应的值为NULL所以当你从我的理解中与==进行比较时它会产生问题所以我们可以使用你在问题中提到的外部加入。