嗨,我有三个表,名为:食物,配料和foods_ingredients (这是许多关系)
每种成分都具有expires_at &股票特性。
我想要写一个复杂的查询,使我能够根据它们的库存和过期日期来获取它们的名称。
这是我自己的查询,但过期比较不起作用
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;
发布于 2022-06-05 03:20:18
这将选择所有存在所有成分(对于这些食品)的食品& food_items (未过期,以及存货gt 0):
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。
它还假设您在所有表(存在行)中都有相关的行,即使这些成分为零库存或过期。
https://stackoverflow.com/questions/72502711
复制相似问题