7

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

4

3 回答 3

6

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

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

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

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

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

于 2013-11-12T14:52:05.723 回答
2

=*在 SQL Server 中进行 OUTER JOIN

更新

(+)= 在 Oracle 中进行 OUTER JOIN

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

于 2013-11-12T13:39:49.367 回答
0

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

于 2013-11-12T13:50:28.010 回答