You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单条MySQL查询,基于已有食材获取可制作菜品?

单条MySQL语句实现食材匹配菜品查询

可以用单条MySQL语句实现这个需求,核心思路是对比菜品所需的全部食材数和用户拥有的匹配食材数,当两者相等时,说明该菜品的所有食材用户都具备。

具体SQL语句

假设用户拥有的食材列表为['Pasta', 'Sauce'],对应的查询语句如下:

SELECT f.FoodName
FROM Foods f
-- 统计每道菜品需要的食材总数
JOIN (
    SELECT FoodId, COUNT(*) AS total_ingredients
    FROM Foods_Ingredients
    GROUP BY FoodId
) fi_total ON f.FoodId = fi_total.FoodId
-- 统计用户拥有的食材能匹配到每道菜品的数量
JOIN (
    SELECT fi.FoodId, COUNT(*) AS matched_ingredients
    FROM Foods_Ingredients fi
    JOIN Ingredients i ON fi.IngredientId = i.IngredientId
    WHERE i.IngredientName IN ('Pasta', 'Sauce')
    GROUP BY fi.FoodId
) fi_matched ON f.FoodId = fi_matched.FoodId
-- 筛选出所需食材全部被用户拥有的菜品
WHERE fi_total.total_ingredients = fi_matched.matched_ingredients;

逻辑说明

  • 第一个子查询fi_total:按菜品分组,计算每道菜品需要的食材总数量。
  • 第二个子查询fi_matched:关联食材表和关联表,筛选出用户拥有的食材对应的菜品,再按菜品分组计算匹配到的食材数量。
  • 主查询通过对比两个子查询的数量,确保菜品的所有食材都被用户拥有,最终返回符合条件的菜品名称。

如果需要忽略食材名称的大小写差异,可以将WHERE条件改为:

WHERE LOWER(i.IngredientName) IN ('pasta', 'sauce')

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:52:44