2014-11-10 5 views
1

У нас есть запрос, который должен возвращать 5 значений и n/a, если какой-либо из них не находится в базе данных. Вот в запросеsql left external join не работает для нескольких столбцов

SELECT NVL(IR16.invoice_refnum_value, 'N/A') AS GL_CODE1, 
     NVL(IR15.invoice_refnum_value, 'N/A') AS GL_AMOUNT1, 
     NVL(IR17.invoice_refnum_value, 'N/A') AS GL_RECEIVING_BU, 
     NVL(IR18.invoice_refnum_value,'N/A') AS GL_SHIPPING_BU, 
     NVL(IR19.invoice_refnum_value, 'N/A') AS GL_SALES_ORDER_NUMBER 
    FROM invoice i2 
    LEFT outer JOIN invoice_refnum ir16 
     ON i2.invoice_gid = ir16.invoice_gid 
    LEFT outer JOIN invoice_refnum ir15 
     ON i2.invoice_gid = ir15.invoice_gid 
    LEFT outer JOIN invoice_refnum ir17 
     ON i2.invoice_gid = ir17.invoice_gid 
    LEFT outer JOIN invoice_refnum ir18 
     ON i2.invoice_gid = ir18.invoice_gid 
    LEFT outer JOIN invoice_refnum ir19 
     ON i2.invoice_gid = ir19.invoice_gid 
    where ir15.invoice_refnum_qual_gid like 'GL AMOUNT%' 
     AND ir16.invoice_refnum_qual_gid like 'GL CODE%' 
     AND ir17.invoice_refnum_qual_gid like 'GL RECEIVING BU%' 
     AND ir18.invoice_refnum_qual_gid like 'GL SHIPPING BU%' 
     AND ir19.invoice_refnum_qual_gid like 'GL SALES ORDER NUMBER%' 
     AND i2.invoice_gid = 'TEST' 
     and regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir15.invoice_refnum_qual_gid,'\d+$') 
     and regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir17.invoice_refnum_qual_gid,'\d+$') 
     and regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir18.invoice_refnum_qual_gid,'\d+$') 
     and regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir19.invoice_refnum_qual_gid,'\d+$') 

Но что происходит, если в любое время есть значение отсутствует даже один refnum кач (т.е. не в базе данных), это будет просто опустить всю строку. он не должен этого делать, он должен просто заменить отсутствующее значение на N/A и отобразить остальные 4 значения.

Пример данных, как ожидается, будет работать, как:

  • test1 test1 test1 test1 test1
    • test2 test2 N/A test2 test2
    • test3 test3 test3 N/A test3
  • test4 test4 test4 test4 test4

того, как текущие результаты приезжающие:

  • test1 test1 test1 test1 test1
  • test4 test4 test4 test4 test4

любые указатели будут весьма благодарны. я не знаю, приближаюсь ли я к этому правильному пути!

+0

Вашего 'where' оговорка откручивания внешних соединений. Переместите условия во всех таблицах, кроме первых, в соответствующие предложения 'on'. –

+1

полностью не гей, но я должен объявить, все, что мне нужно было сделать :) спасибо! – sandy

ответ

2

Ваших from и where пунктов должны быть:

FROM invoice i2 
     LEFT outer JOIN invoice_refnum ir16 
       ON i2.invoice_gid = ir16.invoice_gid and ir16.invoice_refnum_qual_gid like 'GL CODE%' 
     LEFT outer JOIN invoice_refnum ir15 
       ON i2.invoice_gid = ir15.invoice_gid and ir15.invoice_refnum_qual_gid like 'GL AMOUNT%' 
     LEFT outer JOIN invoice_refnum ir17 
       ON i2.invoice_gid = ir17.invoice_gid and ir17.invoice_refnum_qual_gid like 'GL RECEIVING BU%' 
     LEFT outer JOIN invoice_refnum ir18 
       ON i2.invoice_gid = ir18.invoice_gid and ir18.invoice_refnum_qual_gid like 'GL SHIPPING BU%' 
     LEFT outer JOIN invoice_refnum ir19 
       ON i2.invoice_gid = ir19.invoice_gid and ir19.invoice_refnum_qual_gid like 'GL SALES ORDER NUMBER%' and 
       regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir15.invoice_refnum_qual_gid,'\d+$') and 
       regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir17.invoice_refnum_qual_gid,'\d+$') and 
       regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir18.invoice_refnum_qual_gid,'\d+$') and 
       regexp_substr(ir16.invoice_refnum_qual_gid,'\d+$') = regexp_substr(ir19.invoice_refnum_qual_gid,'\d+$') 
WHERE i2.invoice_gid = 'TEST' 
+0

Огромное спасибо! – sandy

Смежные вопросы