このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/137
#  お世話になっています。 
#   
#  どのようなSQLになるか教えてください。 
#   
#  テーブルA   テーブルB   テーブルC 
#  E111,001,AR E111,001,AR E111,001,AR 
#  E111,001,AY E111,001,AY E111,001,AY 
#  E111,002,AR E111,003,AR E111,004,AR 
#   
#  上記のような同じキー項目(ID,番号,コード)を持つ3つのテーブルがあるとき、 
#   
#  E111,001,AR,E111,001,AR,E111,001,AR 
#  E111,001,AY,E111,001,AY,E111,001,AY 
#  E111,002,AR,'','','','','','' 
#  '','','',E111,003,AR,'','','' 
#  '','','','','','',E111,004,AR 
#   
#  の形でレコードを取得するにはどのようなSQLになりますか? 
#   
#  お願いします。 
#   
# 
# 


'上記のような同じキー項目(ID,番号,コード)を持つ3つのテーブルがあるとき、3レコードを併記する'(L) :-
        findsetof([A,B],テーブルA(A,B,_),L1),
        findsetof([A,B],テーブルB(A,B,_),L2),
        findsetof([A,B],テーブルC(A,B,_),L3),
        append(L1,L2,L3,L4),
        findsetof([A,B],append(_,[[A,B]|_],L4),L5),
        findall([A1,B1,X,A2,B2,Y,A3,B3,Z],(
                    append(_,[[A,B]|_],L5),
                    '3レコード選択'(A,B,A1,B1,X,A2,B2,Y,A3,B3,Z),
                    \+((X='',Y='',Z=''))),L).

'3レコード選択'(A,B,A1,B1,X,A2,B2,Y,A3,B3,Z) :-
        選択A(A,B,A1,B1,X),
        選択B(A,B,A2,B2,Y),
        選択C(A,C,A3,B3,Z).

選択A(A,B,'','','') :-
        \+(テーブルA(A,B,X)),!.
選択A(A,B,A,B,X) :-
        テーブルA(A,B,X).
選択B(A,B,'','','') :-
        \+(テーブルB(A,B,X)),!.
選択B(A,B,A,B,X) :-
        テーブルB(A,B,X).
選択C(A,B,'','','') :-
        \+(テーブルC(A,B,X)),!.
選択C(A,B,A,B,X) :-
        テーブルC(A,B,X).