2015-07-15 2 views
0
**Table1**     **Table2**  

ID  Values   ID   Values 
1  100    1   10 
2  200    2   20 
3  300    3   30 
4  400    4   40 
null  2000    null  3000 
5  500 

о/р: -левое внешнее соединение с нулевыми значениями

ID  Table1_Values Table2_Values 
1  100   10 
2  200   20 
3  300   30 
4  400   40 
5  500   null 
null 2000   3000 
+0

Оба столбца таблицы ID имеет несколько нулевого значение, то, что принято результату –

ответ

1

Попробуйте это ..

select t1.id,t1.values,t2.values from 
table1 t1 
left outer join 
table t2 on nvl(t1.id,0)=nvl(t2.id,0) 
+0

Спасибо, что удалось решить –

+0

выберите NVL (t1.id, 0) идентификатор, t1.values, t2.values ​​из table1 t1, t2, где таблицы t1.id = t2.id (+) –

+0

спасибо jWeaver .. –

0

Вы можете добавить проверку, чтобы увидеть, если оба значения NULL для объединения состояние:

SELECT t1.ID, 
     t1.VALUES AS Table1Values, 
     t2.VALUES AS Table2Values 
FROM TABLE2 t1 
     LEFT OUTER JOIN 
     TABLE2 t2 
     ON (t1.ID = t2.ID OR (t1.ID IS NULL AND t2.ID IS NULL)) 
0

Существует функция Oracle Sys_Op_Map_NonNull, которая имеет был использован для многих версий как часть материализованного запроса обновления изображения только для этой цели.

https://oraclesponge.wordpress.com/2006/04/12/a-quick-materialized-view-performance-note/

Раньше совсем без документов, но теперь упоминается как средство оптимизации быстрого обновления: http://docs.oracle.com/database/121/DWHSG/basicmv.htm

Таким образом, вы могли бы:

select ... 
from t1 left outer join t2 on (sys_op_map_nonnull(t1.id) = sys_op_map_nonnull(t2.id)) 

Если вы присоединялись небольшой набор таблицы, то функциональные индексы помогли бы, но я бы не стал беспокоиться, если вы присоединяетесь ко всем строкам.