このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/735
#  日記のテーブル(tD) 
#  id,title,main_text 
#  日記の写真のテーブル(tF) 
#  id,diaryId,file_path,is_deleted,is_finished 
#   
#  以上のようなテーブルがあり、tD.id = tD.diaryIdの関係です 
#  この状況で、日記のタイトル・文章とその日記に属する写真情報のセットを取得したいとき 
#  left joinで on tD.id = tD.diaryId としてクエリしたら良いと思いますが 
#  以下の条件がついた時にどうしたら良いかわかりません 
#   
#  条件1:tFのデータは、一つの日記に対して複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得 
#  条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。 
#  条件3:写真情報をもたないテキスト情報も存在する。 
#   
#  条件1はwhereに tF.is_finished = 1 AND tF.is_deleted =0 として書けば満たせますが、 
#  こう書いてしまうと条件2と3を満たせなくなります(写真情報のない日記を抜き出せなくなる) 
#  どうしたら良いんでしょうか、すみませんがよろしくお願いします 
# 
# 

'日記テキスト・日記写真の取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :-
        日記(_diaryId,_title,_main_text),
        条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished).

条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1) :-
        '条件1:tFのデータは、一つの日記に対し複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1).

条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :-
        '条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished).

条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :-
        '条件3:写真情報をもたないテキスト情報も存在する。'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished).

'条件1:tFのデータは、一つの日記に対し複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1) :-
        日記の写真(_id,_diaryId,_file_path,0,1).

'条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。'(_diaryId,_title,_main_text,'','','','','') :-
        日記の写真(_id,_diaryId,_file_path,_is_deleted,_is_finished),
        \+((_is_deleted=0,_is_finished=1)).

'条件3:写真情報をもたないテキスト情報も存在する。'(_diaryId,_title,_main_text,'','','','','') :-
        \+(日記の写真(_,_diaryId,_,_,_)).