Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 按真-假属性筛选1-N关系_Mysql - Fatal编程技术网

Mysql 按真-假属性筛选1-N关系

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

我现在正在从事一个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 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
只吃纯素的食物。

参见