このディレクトリの索引 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)).