このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/56
#  t1 
#  id str 
#  1 a 
#  2 b 
#  3 c 
#   
#  t2 
#  id str 
#  1 d 
#  2 e 
#  3 f 
#   
#  t3 
#  id t1.id t2.id 
#  1  1  1 
#  2  1  2 
#  3  1  3 
#  4  2  1 
#  5  3  1 
#  6  3  3 
#   
#  こういうテーブルがあります 
#  left joinで結合したところ 
#   
#  t1.id t1.str t2.id t2.str t3.id 
#  1   a   1   d   1 
#  1   a   2   e   2 
#  1   a   3   f   3 
#  2   b   1   d   4 
#  3   c   1   d   5 
#  3   c   3   f   6 
#   
#  こうなりました 
#  これを 
#   
#  t1.idが2でt2.idが2か3はnullなので入っていません 
#  同様にt1.idが3でt2.idが2のとこもnullなので入っていません 
#  これを入れて 
#   
#  t1.id t1.str t2.id t2.str t3.id 
#  1   a   1   d   1 
#  1   a   2   e   2 
#  1   a   3   f   3 
#  2   b   1   d   4 
#  2   b   2   e  null 
#  2   b   3   f  null 
#  3   c   1   d   5 
#  3   c   2   e  null 
#  3   c   3   f   6 
#   
#  こんな感じのを取得したいのですがどのようなSQLをかけばいいでしょうか? 
#  使用DB SQLite3 
# 
# 

't1,t2,t3を結合するがt3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t1_str,_t2_id,_t2_str,_t3_id) :-
        t1(_t1_id,_t1_str),
        t2(_t2_id,_t2_str),
        't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id).

't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id) :-
        t3(_t3_id,_t1_id,_t2_id).
't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id) :-
        \+(t3(_t3_id,_t1_id,_t2_id)),
        _t3_id = [].