0

[モンスター] と [タイプ] の間に多対多の関係を形成する 3 つのテーブルがあります。

monsters, monsters_types, types

私は、それぞれいくつかの関連する[タイプ]を持つ次のモンスターを持っています

MONSTERS.name  |  TYPES.name
===============|===============
sharkthing     |  fish
sharkthing     |  human
               |
werewolf       |  human
werewolf       |  wolf
werewolf       |  warrior
               |
blob           |  ooze
               |
thefly         |  insect
thefly         |  human

タイプ「(オオカミor昆虫)AND(人間)」と関係があるモンスターを全て見つけたいので、その式で取得したい

MONSTERS.name   
===============
werewolf       
thefly        

以下は私のクエリです:

SELECT monsters.name from monsters
JOIN monsters_types
ON monsters_types.monster_id = monster.id
JOIN types
ON types.id = monsters_types.type_id
WHERE (types.name = 'wolf' OR types.name = 'insect') AND types.name = 'human'

AND 演算子があるため、これは機能しませんtype.nameフィールドは同時に「人間」と他の何かの両方になることはできません。

IN ステートメントの使用を検討しましたが、渡された式に基づいて動的にクエリを作成しているため、うまく機能しません。上の表の場合、URL の例は次のようになります。

www.example.com/listmonsters?type=(wolf|insect),human

複雑な式で指定された関連する[タイプ]を持つすべての[モンスター]を選択することはできますか?

4

1 に答える 1

0

試す:

SELECT DISTINCT monsters.name
FROM   monsters
       JOIN monsters_types
         ON monsters_types.monster_id = monster.id
WHERE  EXISTS (SELECT *
               FROM   types
               WHERE  types.id = monsters_types.type_id
                      AND type.name IN ( 'wolf', 'insect' ))
       AND EXISTS (SELECT *
                   FROM   types
                   WHERE  types.id = monsters_types.type_id
                          AND type.name = 'human')
于 2013-06-19T08:29:01.457 に答える