【问题标题】:SQL(Left Join) Get all recipes which have all their ingredients in another tableSQL(Left Join) 获取在另一个表中包含所有成分的所有食谱
【发布时间】:2021-01-03 07:37:22
【问题描述】:

我需要获取所有成分都在另一张桌子上的所有食谱,但我不知道该怎么做。

“成分”表(来自食谱):

  1. 列是成分 ID(唯一)
  2. 列是每种成分的配方 ID
  3. 列是成分(目前是字符串)

'UserIngredients' 表(来自用户):

  1. 列再次只是一个 id(唯一)
  2. 列是成分

一个例子:

成分表(食谱): 用户成分表:

现在我只想取回 13 号食谱,因为这个食谱只需要“黄油”和“梅尔”。我不想得到那些还需要“黄油”和“梅尔”但还需要其他东西的食谱,因为那不在用户成分表中。

现在我想要一个查询(我认为是内部联接)来获取在另一张表中包含所有成分的食谱(ID)。我希望你能理解我的问题并能帮助我。非常感谢!

【问题讨论】:

  • 用两个表格的样本数据和预期的结果来表达需求会更容易。
  • 我添加了示例

标签: mysql sql database sqlite


【解决方案1】:

您需要将ingredientsuseringredients 然后group by recipeidLEFT 连接起来:

select i.recipeid
from ingredients i left join useringredients ui
on ui.ingredient = i.ingredient
group by i.recipeid
having count(*) = count(ui.ingredient)

条件having count(*) = count(ui.ingredient)确保所有成分都用于recipeid

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多