このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/662
#  1つのupdate文に set と条件 の組を複数指定できませんか。 
#  update table_foo 
#  set x = new1 where x = old1, 
#  set y = new2 where y = old2, 
#  set z = new3 where y = old3 
#  みたいなことがしたい。 
# 
# 

:- dynamic(table_foo/3).

'1つのupdate文に set と条件 の組を複数指定できませんか。
update table_foo
set x = new1 where x = old1,
set y = new2 where y = old2,
set z = new3 where y = old3
みたいなことがしたい。'(_x_1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3) :-
        retract(table_foo(_x_1,_y_1,_z_1)),
        更新_1(_x_1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z).
        assertz(table_foo(_x,_y,_z)).

更新_1(_old1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z) :-
        更新_2(_new1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z),!.
更新_1(_x_1,_y_1,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z) :-
        更新_2(_x_1,_y_1,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z).

更新_2(_x,_old2,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z) :-
        更新_3(_x,_new2,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z),!.
更新_2(_x,_y,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z) :-
        更新_3(_x,_y,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z).

更新_3(_x,_y,_old3,_,_,_old3,_,_,_new3,_x,_y,_new3) :- !.
更新_3(_x,_y,_z,_,_,_,_,_,_,_x,_y,_z).