我有 3 个具有以下结构的表:
食谱
id |食谱名称
成分
id |成分_名称
关系
摆脱|食谱 ID |成分_id
示例我搜索含有“鸡肉”和“蛋黄酱”成分的食谱,然后它将显示所有含有这两种成分的食谱。我已经得到了代码:
SELECT * from recipe r
INNER JOIN relationship ri on r.id=ri.recipe_id
INNER JOIN ingredients i on i.id=ri.ingredients_id
WHERE i.ingredients_name IN ('chicken','mayonnaise')
GROUP BY r.id
但我想要的是,当食谱仅包含鸡肉和蛋黄酱作为其成分时,它必须显示在单独的结果上。我怎样才能做到这一点?
最佳答案
通过添加 HAVING 子句 - 像这样:
SELECT * from recipe r
INNER JOIN relationship ri on r.id=ri.recipe_id
INNER JOIN ingredients i on i.id=ri.ingredients_id
GROUP BY r.id
HAVING COUNT(DISTINCT i.ingredients_name)=2 AND
COUNT(DISTINCT case when i.ingredients_name IN ('chicken','mayonnaise')
then i.ingredients_name end)=2
(注意:这将返回仅包含鸡肉和蛋黄酱且不含其他成分的食谱。要返回包含鸡肉和蛋黄酱但也可能包含其他成分的食谱,请删除COUNT(DISTINCT case
条件并恢复 WHERE
子句。)
关于mysql - 如果已给出所有成分,则显示食谱名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257151/