Я помогаю понять разницу в том, как различные базы данных интерпретируют левое внешнее соединение.Разница в левом внешнем соединении в различных базах данных
В сценарии, где есть соотношение 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