首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >食品配料复杂查询

食品配料复杂查询
EN

Stack Overflow用户
提问于 2022-06-04 19:48:05
回答 1查看 76关注 0票数 -2

嗨,我有三个表,名为:食物,配料和foods_ingredients (这是许多关系)

每种成分都具有expires_at &股票特性。

我想要写一个复杂的查询,使我能够根据它们的库存和过期日期来获取它们的名称。

这是我自己的查询,但过期比较不起作用

代码语言:javascript
运行
复制
SELECT * 
FROM `foods`
LEFT JOIN `foods_ingredients` ON foods_ingredients.food_id = foods.id
LEFT JOIN `ingredients` ON foods_ingredients.ingredient_id = ingredients.id
WHERE foods.id IN 
    (SELECT `food_id` 
     FROM `ingredients` 
     LEFT JOIN `foods_ingredients` ON foods_ingredients.ingredient_id = ingredients.id 
     WHERE ingredients.stock > 0 AND ingredients.expires_at > CURRENT_DATE)
ORDER BY `best_before` DESC;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-05 03:20:18

这将选择所有存在所有成分(对于这些食品)的食品& food_items (未过期,以及存货gt 0):

代码语言:javascript
运行
复制
SELECT * 
FROM `foods` f
 
  INNER JOIN `foods_ingredients` fi
  ON fi.food_id = f.id
  
  INNER JOIN `ingredients` i
  ON fi.ingredient_id = i.id

WHERE NOT EXISTS 
        (SELECT *
         FROM `ingredients` ib
              INNER JOIN
              `foods_ingredients` fib 
              on ib.id=fib.ingredient_id
         WHERE fib.food_id=f.f.food_id
               and (ib.stock = 0 or ib.expires_at <= CURRENT_DATE)
        )
ORDER BY `best_before` DESC

这假设如果食品项目的一个或多个成分是stock=0或过期,您就不希望看到该食品/食品_ item。

它还假设您在所有表(存在行)中都有相关的行,即使这些成分为零库存或过期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72502711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档