gpt4 book ai didi

mysql - 从 SQL 查询中获取意外结果

转载 作者:行者123 更新时间:2023-11-29 11:35:18 25 4
gpt4 key购买 nike

所以我有两张 table 。 1 个称为“食谱”,一个称为“配料”。在食谱表中,我有:id、recipe_name、卡路里、bld(早餐、午餐和晚餐可以是 B、L 或 D 的枚举列表)、prep(准备时间)和技能(另一个用于乞求的枚举列表, int 和 adv)。

在成分表中,我有:recipe_id(对菜谱表中的 id 列具有外键约束)、成分_name 和其他一些列。

我试图在某些条件下从食谱表中选择所有列,并从成分表中选择成分名称列 - 我想返回所有食谱,即使它们在成分表中没有成分(这不会真正发生在练习,但无论如何这是我要学习的),并且如果其中一种成分包含用户输入的关键字的一部分(在下一个示例中将使用“橄榄”作为关键字),我想排除食谱。

到目前为止,这是我的 SQL:

SELECT recipes.*, ingredients.ingredient_name
FROM recipes
LEFT OUTER JOIN ingredients
ON ingredients.recipe_id=recipes.id
WHERE ingredients.ingredient_name <> '%olive%'
ORDER BY RAND() LIMIT 7

这仅返回包含成分的食谱,并且仍然包括其中“橄榄”是成分名称之一的一部分的食谱。

感谢您的帮助

最佳答案

在处理此类逻辑时,最好以数据集的形式进行思考。

第 1 组:成分中含有橄榄的食谱列表:

SELECT recipe_id
FROM ingredients
WHERE ingredient_name LIKE '%olive%'

现在我们有一组可以排除的食谱,因为它们含有橄榄。

第 2 组:食谱及其成分列表:

SELECT recipes.*, ingredients.ingredient_name
FROM recipes
LEFT OUTER JOIN ingredients
ON ingredients.recipe_id=recipes.id

这里没有什么惊喜。只是一套一切。我们想要做的是通过上一步中的设置来限制此设置:

SET 3:用SET1集限制SET2集:

SELECT recipes.*, ingredients.ingredient_name
FROM recipes
LEFT OUTER JOIN ingredients
ON ingredients.recipe_id=recipes.id
WHERE recipes.id NOT IN
(
SELECT recipe_id
FROM ingredients
WHERE ingredient_name LIKE '%olive%'
)

关于mysql - 从 SQL 查询中获取意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699190/

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