gpt4 book ai didi

mysql - 从查询中排除与子查询结果中的值相关的所有行

转载 作者:行者123 更新时间:2023-11-30 00:10:56 24 4
gpt4 key购买 nike

我有一个包含这些表的数据库(省略与问题无关的列,所有列都是主键):

recipes (name, ...)
ingredients (name, ...)
composition (rec_name,ing_name)

成分通过其(独特的)名称将食谱和成分联系起来。

我想选择其成分全部存在于生成白名单的给定子查询中的所有食谱(或排除包含非白名单成分的所有食谱)。

到目前为止我想出了这个:

SELECT  DISTINCT recipes.name 
FROM recipes,ingredients, composition
WHERE recipes.name = composition.rec_name AND
ingredients.name = composition.ing_name

GROUP BY ingredients.name

HAVING ingredients.name = ANY (**SUBQUERY**)

通过这种方式,我可以排除非白名单成分,但由于其他白名单成分而返回食谱(如果我删除DISTINCT,每个食谱显示的次数与“好”成分的次数一样多)它是由)制成的。当配方中含有非白名单成分时,如何才能完全删除它?

我没有在问题中包含子查询,因为它相当长,并且经过测试并且有效,它以 SELECT Members.name FROM ... 开头,因此不存在类型问题。

最佳答案

如果您想检查菜谱是否包含子查询中的所有成分,那么您可以简单地计算成分不在列表中的次数。这是一种方法:

SELECT c.rec_name
FROM composition c
GROUP BY c.rec_name
HAVING sum(ing_name not in (**SUBQUERY**)) = 0;

关于mysql - 从查询中排除与子查询结果中的值相关的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com