Mysql 多对多关系和复杂where语句
我有3个表,它们形成了[怪物]和[类型]之间的多对多关系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 |
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')
为什么语句中的
不是动态生成查询中的选项?