このディレクトリの索引

# 出典 :: SQL質疑応答スレ 9問目 #330 # ■テーブルデータ # ・IDテーブル   # ・マスターテーブル # 1, 2, 3      # 1, A # 1, 2, 4      # 2, A # 5, -1, -1     # 3, A # -1, 1, 2      # 4, B # 2, -1, 5      # -1, Z # # ■やりたいこと # マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 # 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード # だけクラス付で抽出する。 # ここで「同一クラスに属する」とは、クラスA, B, Zからなるグループに対して、 # Z以外の要素が一種類しか存在しない場合に、グループはそのクラスに属すると定める。 # 最終的に欲しいデータは # # 1, 2, 3, A # 5, -1, -1, B # -1, 1, 2, A # # となります。よろしくお願いします。 'IDテーブル'(1,2,3). 'IDテーブル'(1,2,4). 'IDテーブル'(5,-1,-1). 'IDテーブル'(-1,1,2). 'IDテーブル'(2,-1,5). マスターテーブル(1,'A'). マスターテーブル(2,'A'). マスターテーブル(3,'A'). マスターテーブル(4,'B'). マスターテーブル(5,'B'). マスターテーブル(-1,'Z'). 'マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード だけクラス付で抽出する。 ここで「同一クラスに属する」とは、クラスA, B, Zからなるグループに対して、 Z以外の要素が一種類しか存在しない場合に、グループはそのクラスに属すると定める。'(LL) :- 'マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード だけクラス付で抽出する。'(LL). 'マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード だけクラス付で抽出する。'(LL) :- 'マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、'(_IDテーブルならび,LL_2), '各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコードだけクラス付で抽出する。'(_IDテーブルならび,LL_2,LL). 'マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、'(_IDテーブルならび,LL_2) :- 'IDテーブルならび(_IDテーブルならび), findall(L,( 'IDテーブルのレコード毎にマスターテーブルを参照してクラス(A, B, Z)を振り当る'(_IDテーブルならび,L)),LL_2). 'IDテーブルのレコード毎にマスターテーブルを参照してクラス(A, B, Z)を振り当る'(_IDテーブルならび,[_1_1,_2_1,_3_1]) :- member([_1,_2,_3],_IDテーブルならび), 'マスターテーブルを参照して'(_1,_2,_3,_1_1,_2_1,_3_1). 'マスターテーブルを参照して'(_1,_2,_3,_1_1,_2_1,_3_1) :- マスターテーブル(_1,_1_1), マスターテーブル(_2,_2_1), マスターテーブル(_3,_3_1). '各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコードだけクラス付で抽出する。'(_IDテーブルならび,LL_2,LL) :- findall(L,( '各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコードだけクラス付で'(_IDテーブルならび,LL_2,L)),LL). '各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコードだけクラス付で'(_IDテーブルならび,LL_2,L) :- '各レコードが同一クラスに属するか否かを判定し、'(_IDテーブルならび,LL_2,L1,_クラス), '同一クラスに属するレコードだけクラス付で'(L1,_クラス,L). '各レコードが同一クラスに属するか否かを判定し、'(_IDテーブルならび,LL_2,L1,_クラス) :- '各レコードが'(_IDテーブルならび,LL_2,L1,L2), '各レコードが同一クラスに属するか否か'(L2,_クラス). '各レコードが'(_IDテーブルならび,LL_2,L1,L2) :- nth1(_nth1,_IDテーブルならび,L1), nth1(_nth1,LL_2,L2). '同一クラスに属するか否か'(L2,_クラス) :- setof(A,[A] ^ ( member(A,L2), A \== 'Z')),[_クラス]). '同一クラスに属するレコードだけクラス付で'(L1,_クラス,L) :- append(L1,[_クラス],L).