このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1316769778/133
#  SQLの質問です。 
#   
#  DBMSはOracle11gR2です。 
#   
#  MST_A 
#   
#  ID      VALUE 
#  ----    ----- 
#     1      MA1 
#     2      MA2 
#     3      MA3 
#   
#  MST_B 
#   
#  ID1   ID2  VALUE 
#  ---- ----  ----- 
#     1    1    MB1 
#     2    2    MB2 
#     3    3    MB3 
#   
#  DAT_A 
#   
#  ID1   ID2  VALUE 
#  ---- ----  ----- 
#     1    1    DA1 
#     2         DA2 
#     3    4    DA3 
#   
#   
#  SELECT 
#    ma.VALUE,mb.VALUE.da.VALUE 
#  FROM 
#    MST_A ma,MST_B mb,DAT_A da 
#  WHERE da.ID1 = ma.ID 
#    AND ma.ID = mb.ID1 
#    AND da.ID2 = mb.ID2; 
#   
#  のSQL結果に、 
#  DAT_AのID2がnullになっているデータ(VALUE=DA2) 
#  を含めたいのです。 
#   
#  MST_AとMST_Bはデータ件数が非常に多い(1〜2億件)ので、 
#  できればUNIONで複数回読み込むのは避けたいです。 
#   
#  アドバイスよろしくお願いいたします。 
# 
# 

求める結果(_VALUE_A,_VALUE_B,_VALUE_D) :-
        'MST_A'(_ID,_VALUE_A),
        'MAT_B'(_ID,_ID2_B,_VALUE_B),
        'MST_D'(_ID,_ID2_D,_VALUE_D),
        条件_1(_ID2_B,_ID2_D).

条件_1(_ID2_B,'NULL') :- !.
条件_1(_ID2,_ID2) :- !.