我有一个 SQL 问题。我正在使用以下一组表:
Recipe 表包含 5 个配方,成分包含许多成分 (52),成分列表是一个关联实体,是配方和成分之间多对多关系的实现。RecipeID 和 IngredientID 本质上是自动递增的 ID 号。
我正在尝试编写一个显示所有素食食谱的查询(即没有
'%beef%',
'%pork%',
'%chicken%',
'%lamb%
在任何相关的成分。名称中)。我遇到的问题是结果集每个成分包含一行,而不是每个食谱一行。
生成这个结果集的查询是(注意这里的成分表被命名为成分):
SELECT recipe.name AS Dish, ingredients.name
FROM (recipe JOIN ingredientlist ON recipe.recipeid=ingredientlist.recipeid
JOIN ingredients ON ingredientlist.ingredientid=ingredients.ingredientid)
WHERE ingredients.name NOT LIKE '%beef%'
AND ingredients.name NOT LIKE '%chicken%'
AND ingredients.name NOT LIKE '%pork%'
AND ingredients.name NOT LIKE '%lamb%';
该查询生成 50 个结果(不是 52 个,因为根据它们的成分名称排除了两种成分,其中包含我的 WHERE 子句排除的子字符串)。
我的目标是返回配方表中 5 个配方名称中的 3 个(减去相关成分中包含肉类的名称)。