我在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对其他答案的有用评论。