Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多对多关系和复杂where语句_Mysql_Many To Many - Fatal编程技术网

Mysql 多对多关系和复杂where语句

Mysql 多对多关系和复杂where语句,mysql,many-to-many,Mysql,Many To Many,我有3个表,它们形成了[怪物]和[类型]之间的多对多关系 monsters, monsters_types, types 我有以下怪物,每个都有几个相关的[类型] MONSTERS.name | TYPES.name ===============|=============== sharkthing | fish sharkthing | human | werewolf | human werewolf |

我有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
我想找到所有与类型(狼或昆虫)和(人类)有关系的怪物,所以我想用这个表达

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'
这将不起作用,因为有一个运算符和type.name字段不能同时是“人”和其他内容

我已经研究过如何在stations中使用,但这对我来说并不好,因为我正在基于传入的表达式动态构建查询。对于上表,示例url为

www.example.com/listmonsters?type=(wolf|insect),human
是否可以选择所有具有复杂表达式指定的相关[类型]的[怪物]

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')

为什么语句中的
不是动态生成查询中的选项?