このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1316769778/411
#  質問です。DBはSQLite3です。 
#  構成が同じなので../test/read.cgi/db/1316769778/244のテーブルを説明に使わせてもらいます 
#   
#  shop 
#  id name 
#  1 Aカンパニー 
#  2 Bカンパニー 
#  3 Cカンパニー 
#   
#  area 
#  1 北海道 
#  2 青森 
#  3 岩手 
#  4 秋田 
#   
#  shop_area 
#  shop_id area_id 
#  1 1 
#  1 2 
#  1 3 
#  2 2 
#  2 4 
#  3 2 
#  3 3 
#   
#  
#  北海道なら、Bカンパニー・Cカンパニー 
#  青森なら、無し 
#  岩手なら、Bカンパニー 
#  秋田なら、Aカンパニー・Cカンパニー 
#  北海道・秋田なら、Cカンパニー 
#   
#  除外検索の要領で、対象の支社が無い会社を呼び出したい時はどうすればよいのでしょうか 
#  

'除外検索の要領で、対象の支社が無い会社を呼び出す' :-
        '除外検索の要領で、対象の支社が無い会社を呼び出す'(_地域ならび,_対象の支社が無い会社ならび),
        concat_atom(_地域ならび,'・',S1),
        concat_atom(_対象の支社が無い会社ならび,'・',S2),
        writef('%tなら、%t\n',[S1,S2]),
        fail.
'除外検索の要領で、対象の支社が無い会社を呼び出す'.

'除外検索の要領で、対象の支社が無い会社を呼び出す'(_地域ならび,_対象の支社が無い会社ならび) :-
        findall([_area_name,_対象の支社が無い会社ならび],(
                    '対象の支社が無い会社を呼び出す'(_area_name,_対象の支社が無い会社ならび)),
                L1),
        findsetof(_対象の支社が無い会社ならび,(
                    append(_,[[_,_対象の支社が無い会社ならび]|_],L1)),
                _対象の支社が無い会社ならびパターン),
        append(_,[_対象の支社が無い会社ならび|_],_対象の支社が無い会社ならびパターン),
        findall(_area_name,(
                    append(_,[[_area_name,_対象の支社が無い会社ならび]|_],L1)),
                _地域ならび).

'対象の支社が無い会社を呼び出す'(_area_name,_対象の支社が無い会社ならび) :-
        area(_area_id,_area_name),
        findsetof([_shop_id,_name],(
                            shop_area(_shop_id,_area_id),
                            shop(_shop_id,_name)),
                L1),
        findall(_name,(
                    append(_,[[_shop_id,_name]|_],L1),
                    \+(shop_area(_shop_id,_area_id))),
                _対象の支社が無い会社ならび).