我有以下查詢。與+運營商聯繫
Select a.c1,b.c1,a.c2,b.c2 from tab1 a,tab2 b
where a.c3(+)=b.c3 and b.c3(+) = 'abc'
我知道上面的查詢是將tab1與tab2左連接。但我不明白b.c3(+)是什麼意思。請幫我解決這個問題。提前致謝。
我有以下查詢。與+運營商聯繫
Select a.c1,b.c1,a.c2,b.c2 from tab1 a,tab2 b
where a.c3(+)=b.c3 and b.c3(+) = 'abc'
我知道上面的查詢是將tab1與tab2左連接。但我不明白b.c3(+)是什麼意思。請幫我解決這個問題。提前致謝。
你不需要了解發生了什麼。該語法已過時,應該被棄用(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';
我很想知道你的想法是什麼,對於實際上還在教授30多歲的語法的教授/講師,這些語法在今天很少使用。 –
我正在分析一箇舊代碼。在那裏我得到了這條線a.b(+)='abc'。這是a.b(+)有一些意思,還是這意味着a.b ='abc' – mano
這意味着它之前的表達式應該被視爲外連接的弱側;即在你的例子中,如果表'A'中沒有與'b.c3'匹配的行,那麼'B'行不會被排除在結果之外,並且將被視爲它已經連接到來自'A'的行與所有空值。 –
有趣的問題!您不需要多個表格來提問或實驗。
取出SCOTT模式中的EMP表。
select * from emp where deptno = 10
將返回三人行,對於員工在部門10
,我們能得到什麼,如果我們將其更改爲
select * from emp where deptno(+) = 10
?一種可能是我們收到錯誤信息。另一個就是 - 與外部連接的Oracle表示法類似 - 即使deptno不等於10,我們也會獲得EMP行的行。(但是,實際上,這是錯誤的期望;當deptno不是10時得到行, (+)應該在右側 - 並且將將導致錯誤。)
事實上,我們都沒有得到這些。相反,(+)忽略。我們得到和以前完全一樣的三排。
所以你的猜測是正確的:(+)在這種情況下什麼都不做。
只是要非常清楚:「上下文」是我們有一個條件=和一側(+)語法,但另一側是一個常量表達式 - 條件是而不是實際「加入條件」。
[Oracle「(+)」Operator]的可能重複(https://stackoverflow.com/questions/4020786/oracle-operator) –
https://stackoverflow.com/questions/4020786/oracle-operator – mohan111
@ AndréStannek - 這個問題**不是您建議的**的重複**。這裏的問題是:「(+)是什麼意思**在平等的另一端,我們有一個常數值**」 – mathguy