所以基本上我将3个表连接在一起主表是配方,然后转到成分列表,然后是成分。

因此,我需要查询仅包含不包含鸡肉的食谱的查询。我遇到的问题是,因为当我在其中使用!=时,食谱中有很多成分,只是除去了那块肉上的成分,而剩下了其他成分.....我怎么能解释多种成分。

select Recipe.name as "No chicken"  from Recipe inner join IngredientList on Recipe.recipeId=IngredientList.recipeId inner join Ingredients on IngredientList.IngredientId=Ingredients.ingredientId where type!="chcicken" group by Recipe.name;

最佳答案

您原始的语句有一个GROUP BY没有聚合函数。那没有道理。如果要排序,应为ORDER BY

尝试这样的事情:

SELECT `Recipe`.`name` AS "No chicken"
FROM `Recipe`
WHERE `Recipe`.`RecipeId` NOT IN (
    SELECT DISTINCT `IngredientList`.`RecipeId` AS `RecipeID`
    FROM `IngredientList`
        INNER JOIN `Ingredients` ON `IngredientList`.`IngredientId` = `Ingredients`.`IngredientId`
    WHERE `Ingredients`.`Type` = 'chicken'
)
ORDER BY `Recipe`.`name`


如果要获取重复的配方名称,则根据您的架构,可能需要在主select语句中使用SELECT DISTINCT

关于mysql - MySQL查询不在哪里与分层表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5768796/

10-12 13:25