このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1316769778/932
#  SQLの質問がありまして、書きます。  
#   
#  Aテーブル  
#  A B C  
#  1 11  
#  2 22  
#  3 33  
#   
#   
#  Bテーブル  
#  A B C  
#  4 44 1  
#  5 55 2  
#  6 66  
#   
#  欲しい結果  
#  A B  
#  1 44  
#  2 55  
#  3 33  
#  6 66  
#   
#  BテーブルのCがAテーブルのAと一致したらBテーブル参照したいですが、A項目のみ値をAテーブルの値にしたいです。  
#  何かアドバイスお願いします。。。。。  
#  調べても、よくわからなかったので。。。  
#  お願いします。。。  
#   

'BテーブルのCがAテーブルのAと一致したらBテーブル参照したいですが、A項目のみ値をAテーブルの値にしたいです。'(A,B) :-
        findall([A,C],(
                    'Aテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はBの値はBテーブルのものに置換される'(A,C)),
                L1),
        findall([A,B],(
                    'Bテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はこれを除く'(A,B,C)),
                L2),
        append(L1,L2,L),
        member([A,B],L).

'Aテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はBの値はBテーブルのものに置換される'(A,X) :-
        'Aテーブル'(A,B),
        'Bテーブルと結合可の時はBテーブルのCを使う'(A,C).

'Bテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はこれを除く'(A,B,C) :-
        'Bテーブル'(A,B,C),
        'Aテーブルと結合可のものは除く'(C).

'Bテーブルと結合可の時はBテーブルのCを使う'(A,C) :-
        'Bテーブル'(_,C,A),!.
'Bテーブルと結合可の時はBテーブルのCを使う'(A,A).

'Aテーブルと結合可のものは除く'(C) :-
        \+('Aテーブル'(_,C)).