我有以下查询。
DECLARE @StartDate date = '2017-05-01'
我知道上面的查询是使用tab2连接tab1。但我不明白b.c3(+)是什么意思。请帮我解决这个问题。提前谢谢。
答案 0 :(得分:3)
您无需了解正在发生的事情。语法已过时,应弃用(SQL Server中不推荐使用类似的语法)。
只需学习将其写为外连接:
Select a.c1, b.c1, a.c2, b.c2
from tab1 a left join
tab2 b
on a.c3 = b.c3 and b.c3 = 'abc';
答案 1 :(得分:0)
有趣的问题!您不需要多个表来提问或试用它。
采用SCOTT模式中的EMP表。
select * from emp where deptno = 10
对于部门10中的员工,将返回三行。
如果我们将其更改为
,我们会得到什么?select * from emp where deptno(+) = 10
?一种可能性是我们收到错误消息。另一个是 - 类似于外连接的Oracle表示法 - 即使deptno不等于10,我们也会获得EMP行的行。(虽然,实际上,这是错误的期望;当deptno不是10时获取行, (+)应位于右侧 - 将导致错误。)
事实上,我们都没有得到这些。相反,(+)被忽略。我们得到的行与以前完全相同。
所以你的猜测是正确的:那个环境中的(+)什么都不做。
只是要非常明确:“上下文”是我们的条件是=并且一边是(+)语法,但另一边是常量表达式 - 条件是不是实际的“加入条件”。