【问题标题】:SQL searching for all subsetsSQL 搜索所有子集
【发布时间】:2014-02-07 19:59:03
【问题描述】:

我正在尝试创建一个食谱搜索查询,该查询返回可以仅使用用户已有的成分制作的食谱。例如,如果用户有洋葱、西红柿、牛奶、生菜、巧克力糖浆等,那么查询结果应该是沙拉(洋葱、西红柿、生菜)、巧克力牛奶(牛奶、巧克力糖浆)等食谱。

现在我有一个名为 recipes 的表,其中包含列 id(主键)和成分。我有另一个名为 user_ingredients 的表,其中包含列 id 和成分。

一个有效的 SQL 查询应该是什么样的?就集合论而言,我知道我想要所有成分集包含在用户成分集中的食谱。我只是不知道如何将其转换为 SQL,因为我是一个 SQL 新手。

另外,如果您认为我的数据库结构不应该是这样,请随时推荐更好的东西!

【问题讨论】:

标签: sql


【解决方案1】:

如何在 recipes.ingredients 列中存储多种成分?您应该为此准备另一个表 - recipe_ingredients,每个配方的每种成分都有一行。

通过这样的设置,这个查询很简单,也应该很高效:

SELECT recipe_id
  FROM recipe_ingredients ri
  LEFT JOIN (SELECT *
               FROM user_ingredients
              WHERE user_id = 1) ui ON (ui.ingredient = ri.ingredient)
 GROUP BY recipe_id
HAVING SUM(case when user_id is null then 1 else 0 end) = 0;

查看SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2021-09-18
    相关资源
    最近更新 更多