当前位置: 首页 > 面试题库 >

仅在满足多个子句的情况下才返回行

费秦迟
2023-03-14
问题内容

我正在研究分配液体的应用程序。这是数据库的组织

罐:

  • canister_id {PK}
  • Ingredient_id {FK}

成分:

  • Ingredient_id {PK}
  • 成分名称

喝:

  • Drink_id {PK}
  • 饮料名称

成分:

  • instance_id {PK}
  • Drink_id {FK}
  • Ingredient_id {FK}
  • 数量

每种饮料都有多种成分(保存在IngredientInstance实例表中),但是只有12个容器。我正在尝试编写一个SQL命令,该命令将收集罐中当前具有所有必需成分的所有饮料。

到目前为止,这就是我所拥有的。

SELECT DISTINCT Drink.drink_name
FROM Drink, ingredientInstance, Canister
WHERE (((ingredientInstance.drink_id)=[Drink].[drink_id])
AND ((ingredientInstance.ingredient_id) 
IN (select ingredient_id FROM Canister)));

但是,这将返回所有甚至具有单一成分的饮料。我正在寻找一种方法,以确保对于 componentInstance中的每个 相关成分,当前都在容器中。

举例来说,假设 Drink1 需要 原料1原料2
。如果罐中同时存在这两个成分ID,我希望它出现在结果中,但是如果罐中只有一种或零种成分,则不希望它出现在结果中。

我敢肯定这很明显,但是我想不起来该怎么做。


问题答案:

这是组内查询的示例。我主张having为此使用带有子句的聚合:

select drink.drinkname
from IngredientInstance ii join
     Drink d
     on ii.DrinkId = d.Drinkid left join
     Canister c
     on ii.IngredientId = c.INgredientId
group by drink.drinkname
having sum(iif(c.IngredientId is null, 1, 0)) = 0;

这是加入IngredientInstanceDrink只是为了获得饮料的名称。然后,它正在left joinCanister表执行操作。这样可以将饮料中的所有成分以及匹配的成分(如果有)保留在罐中。如果缺少某种成分Canister,则该成分为NULL
ingredientId

group by在由饮料配料的外观。最后一个having子句计算缺少的成分的数量,并且只返回没有缺失的成分的饮料。



 类似资料:
  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 问题内容: 切换语句修复: switch语句仅返回最后一种情况,即情况4,“#0R0dfdf0FF”。我该如何解决这个问题,以使文本视图显示对话框中单击的那个?我是一个新手,所以真的很感谢您的帮助。 } 问题答案: 交换机分支的末尾缺少您。

  • 问题内容: 我有一个MySQL数据库,其中表A与表B具有一对多关系,我想选择表B中表A中没有子项的所有行。 和 两者似乎都很慢。是否有更快的查询来实现相同的目的? 如果这是相关的,在我的数据库中,表A大约有500,000行,表B大约有3到4百万行。 编辑: 对于我的数据库中的实际表,解释给我: 为了 和 为了 在我的情况下,frontend_form471是表A,SchoolData是表B Edi

  • 我试图用多个if语句构建一个简单的javascript页面。其思想是根据一堆if语句的计算结果添加到一个列表中。问题是,如果其中任何一个失败,就会触发else语句。我只想在它们都失败的情况下触发else。 当我运行它并且满足所有条件时,我会得到: 当我运行此程序且不满足任何条件时,我将得到: 但如果任何一个条件不满足,我会得到: 或 我试过使用,但它在第一次“匹配”后退出。所以在上面的例子中,如果