Mysql 按真-假属性筛选1-N关系
我现在正在从事一个MySQL项目,希望做以下工作: 我获得了表Mysql 按真-假属性筛选1-N关系,mysql,Mysql,我现在正在从事一个MySQL项目,希望做以下工作: 我获得了表餐食、配料和餐食_配料,并通过以下查询从中获取数据: SELECT m.Available , m.ID , m.Name , i.Vegetarian , i.Vegan FROM Meals m LEFT JOIN Meals_Ingredients mi ON mi.MealID = m.ID LEFT JOIN Ingredien
餐食
、配料
和餐食_配料
,并通过以下查询从中获取数据:
SELECT m.Available
, m.ID
, m.Name
, i.Vegetarian
, i.Vegan
FROM Meals m
LEFT
JOIN Meals_Ingredients mi
ON mi.MealID = m.ID
LEFT
JOIN Ingredients i
ON i.ID = mi.IngredientID
ORDER
BY m.ID;
查询返回下表(不要介意名称,都是德语):
我的目标是做两个新的查询,只显示
素食者
或只显示素食者
膳食,例如,所有成分分别是素食者或素食者。有人能帮我吗?要获取所有成分都是素食主义者的食物,您可以在不存在
条件下使用相关子查询进行过滤,如下所示:
select m.*
from meals m
where not exists (
select 1
from meals_ingredients mi
inner join ingredients i on i.id = mi.ingredient_id
where mi.meal_id = m.id and i.vegan = 0
)
这句话的意思是:把所有不含非素食成分的食物都去掉
对于素食餐,您可以将条件
i.vegan=0
更改为i.vegen=0
如果您按餐分组,您可以在HAVING子句中设置条件,如:
SELECT m.Available, m.ID, m.Name
FROM Meals m
LEFT JOIN Meals_Ingredients mi ON mi.MealID = m.ID
LEFT JOIN Ingredients i ON i.ID = mi.IngredientID
GROUP BY m.Available, m.ID, m.Name
HAVING SUM(i.Vegetarians = 0) = 0
这将返回所有没有素食者=0
的膳食,这意味着他们只是素食者。将条件更改为:
HAVING SUM(i.Vegan = 0) = 0
只吃纯素的食物。参见