このディレクトリの索引

# 出典 :: SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(_指定された備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), '指定した備品、例えばPCと電話を両方持っている'(_指定された備品名ならび,_ユーザーID). '指定した備品、例えばPCと電話を両方持っている'(_指定された備品名ならび,_ユーザーID) :- ユーザーが持っている備品名ならび(_ユーザーID,_ユーザーが持っている備品名ならび), 指定された備品名ならびの全ての備品をユーザーは持っている(_指定された備品名ならび,_ユーザーが持っている備品名ならび). ユーザーが持っている備品名ならび(_ユーザーID,_ユーザーが持っている備品名ならび) :- findall(_備品名,( ユーザーが持っている備品名(_ユーザーID,_備品名)),_ユーザーが持っている備品名ならび). ユーザーが持っている備品名(_ユーザーID,_備品名) :- 所持品(_ユーザーID,_備品ID), 備品(_備品ID,_備品名). 指定された備品名ならびの全ての備品をユーザーは持っている(_指定された備品名ならび,_ユーザーが持っている備品名ならび) :- forall(member(_備品名,_指定された備品名ならび),member(_備品名,_ユーザーが持っている備品名ならび)).