我幫助理解各種數據庫解釋左外連接方式的差異。各種數據庫中的左外連接差異
在左右表之間存在1:1關係的場景中,我想象連接操作的計數將完全等於左表中的計數。
我已經注意到這對於MS SQL來說是正確的,但是Oracle(PL/SQL)似乎對此有不同的解釋。 Oracle中左外連接的計數是左表中所有條目的總和+右邊的匹配條目。
請確認我的理解是否正確,如果我們需要在Oracle和MS SQL之間協調數據,那麼最佳方法是什麼。
的代碼 -
select distinct NVL(L11, NVL(L10, NVL(L9, NVL(L8, NVL(L7, NVL(L6, NVL(L5, NVL(L4, NVL(L3, NVL(L2, NVL(L1, NVL(L0,'ERR')))))))))))) ENDITEM, case when l1 = 'Raw Wafer' then l0
when l2 = 'ABC' then l1
when l3 = 'ABC' then l2
when l4 = 'ABC' then l3
when l5 = 'ABC' then l4
when l6 = 'ABC' then l5
when l7 = 'ABC' then l6
when l8 = 'ABC' then l7
when l9 = 'ABC' then l8
when l10 = 'ABC' then l9
when l11 = 'ABC' then l10 end item, g1.item bl1, g2.item bl2, g3.item bl3, g4.item bl4, g5.item bl5, g6.item bl6, g7.item bl7, g8.item bl8, g9.item bl9, g10.item bl10, g11.item bl11,
decode(g1.item, null, 0, 1) + decode(g2.item, null, 0, 1) + decode(g3.item, null, 0, 1) + decode(g4.item, null, 0, 1) + decode(g5.item, null, 0, 1) + decode(g6.item, null, 0, 1) + decode(g7.item, null, 0, 1) + decode(g8.item, null, 0, 1) + decode(g9.item, null, 0, 1) + decode(g10.item, null, 0, 1) + decode(g11.item, null, 0, 1) cnt,
gg.* from TABL1 gg
left outer join TABL2 g1 on g1.item = gg.l1
left outer join TABL2 g2 on g2.item = gg.l2
left outer join TABL2 g3 on g3.item = gg.l3
left outer join TABL2 g4 on g4.item = gg.l4
left outer join TABL2 g5 on g5.item = gg.l5
left outer join TABL2 g6 on g6.item = gg.l6
left outer join TABL2 g7 on g7.item = gg.l7
left outer join TABL2 g8 on g8.item = gg.l8
left outer join TABL2 g9 on g9.item = gg.l9
left outer join TABL2 g10 on g10.item = gg.l10
left outer join TABL2 g11 on g11.item = gg.l11
當我做這個MS SQL計數從TABL1建議只計數而甲骨文似乎更建議。
謝謝。
Oracle的行爲應該是相同的 - 我懷疑你的連接條件或語法是不正確的。 –
左外連接以所有數據庫的標準方式定義。請發佈Oracle代碼;它沒有做你認爲正在做的事情。 –
同意以上評論這是一個編碼問題。 – Namphibian