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

最佳答案

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

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

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

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

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

10-08 14:50