このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/777
#  【質問テンプレ】 
#   
#  ・DBMS名とバージョン 
#  Mysql 4.0.27 
#   
#  ・テーブルデータ 
#  a_tbl 
#  ID | DATE     | DATA 
#  --+----------+----- 
#  1 | 20081111 | あああ 
#  2 | 20071111 | いいい 
#   
#  b_tbl 
#  ID | DATE     | DATA 
#  --+----------+----- 
#  1 | 20081110 | えええ 
#  2 | 20081109 | おおお 
#   
#  c_tbl 
#  ID | DATE     | DATA 
#  --+----------+----- 
#  1 | 20081108 | ききき 
#  2 | 20071109 | くくく 
#   
#   
#  ・欲しい結果 
#   
#  ID | DATE     | DATA 
#  --+----------+----- 
#  a1 | 20081111 | あああ 
#  b1 | 20081110 | えええ 
#  b2 | 20081109 | おおお 
#  c1 | 20081108 | ききき 
#   
#   
#  ・説明 
#  上記のような別々の3つのテーブルからDATEの新しい順にソートして、 
#  かつ各テーブルの行データを出力したいのですが、 
#  どのようにすればよいでしょうか? 
# 
# 

'別々の3つのテーブルから、かつ各テーブルの行データを出力する' :-
        findall([_DATE,_TID,_DATA],(
                    a_table(_ID,_DATE,_DATA),
                    concat_atom([a,_ID],_TID)),
                LL1),
        findall([_DATE,_TID,_DATA],(
                    b_table(_ID,_DATE,_DATA),
                    concat_atom([b,_ID],_TID)),
                LL2),
        findall([_DATE,_TID,_DATA],(
                    a_table(_ID,_DATE,_DATA),
                    concat_atom([a,_ID],_TID)),
                LL3),
        'DATEの新しい順にソートして'(LL1,LL2,LL3,LL),
        各テーブルの行データを出力する(LL).

'DATEの新しい順にソートして'(LL1,LL2,LL3,LL) :-
        sort(LL1,LL12),
        sort(LL2,LL22),
        sort(LL3,LL32),
        merge_sort(LL12,LL22,LL4),
        merge_sort(LL4,LL32,LL),!.

merge_sort([],L,L) :- !.
merge_sort(L,[],L) :- !.
merge_sort([A|R1],[B|R2],[A|R3]) :-
        A @>= B,
        merge_sort(R1,[B|R2],R3),!.
merge_sort([A|R1],[B|R2],[B|R3]) :-
        A @< B,
        merge_sort([A|R1],R2,R3),!.

各テーブルの行データを出力する(LL) :-
        append(_,[[_DATE,_TID,_DATA]|R],LL),
        write_formatted('%t,%t,%t\n',[_TID,_DATE,_DATA]),
        R = [].