2017-04-03 11 views
0

結合列の1つがnullの可能性がある2つの表を結合すると、パフォーマンス上の理由から最良の方法がわかります。SQL結合可能なNULL列

table1: 
L_ID 
U_ID 
L_NAME 
U_NAME 

table2: 
L_ID 
U_ID 
L_TAGS 

これはOracle 11以降で、上記の両方の表にありますが、U_IDはnullになる可能性があります。一方がnullの場合、他方はnullになります。私は現在、使用しています

table1.L_ID = table2.L_ID 
and nvl(table1.U_ID, 0) = nvl(table2.U_ID, 0) 

何かがこの作業を行うには良い方法があるかもしれないと言われます。アイデア?

答えて

2

はい。可能であればインデックスを使用できるようにsargableにしてください。

where table1.L_ID = table2.L_ID 
    and (
     table1.U_ID = table2.U_ID 
     or (table1.U_ID is null and table2.U_ID is null) 
     ) 
+0

チップをありがとう、ありがとう。 – Theromit

+0

これを行うには、 'table1(l_id、u_id)'(またはクエリの残りの部分に応じて、 'table2'でインデックス付けされた同じ列)に複合インデックスが必要です。 – APC

関連する問題