mysql - 如果已给出所有成分,则显示食谱名称

标签 mysql sql

我有 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/

相关文章:

mysql - 为什么 SELECT * FROM table WHERE value != '1' 不返回 NULL 字段?

sql - 如何从postgresql中的字符串中获取项目?

Mysql(db design) - 存储每个财政年度从 1 开始的发票,即 4 月 1 日

php - 使用 Apache 2 和 PHP 5.5 安装 MySQLi

php - 3 计算字段中唯一值的实例

mysql - Ruby on Rails Errno::EPIPE 断管

c# - asp.net c# 应用程序中浏览器之间的文件扩展名丢失

php - 连接来自多个 MySQL 表的结果并使用 PHP 输出

sql - 将 oracle 转换为 PostgreSQL 时出现数字溢出

sql - 使用 Postgresql 将日期转换为特定格式