再会。
需要将每餐(Meals 表)按产品(Products 表)分解,同时标明该餐中所含产品的总量、其总成本和卡路里含量。有必要找到一个不依赖于特定 DBMS 的通用解决方案。
我是如何尝试解决问题的:由于经常需要这些信息,我决定创建一个视图
"CREATE VIEW MEAL_TO_PRODUCTS_STATISTICS " +
"(meal_id, product_id, amount_product, total_price, total_calories) AS " +
"SELECT " +
"MEAL_TO_DISHES_COMPOSITION.meal_id, " +
"DISH_TO_PRODUCTS_COMPOSITION.product_id, " +
"SUM(MEAL_TO_DISHES_COMPOSITION.amount_dish * DISH_TO_PRODUCTS_COMPOSITION.amount_product), " +
"SUM(MEAL_TO_DISHES_COMPOSITION.amount_dish * DISH_TO_PRODUCTS_COMPOSITION.amount_product * PRODUCTS.price), " +
"SUM(MEAL_TO_DISHES_COMPOSITION.amount_dish * DISH_TO_PRODUCTS_COMPOSITION.amount_product * PRODUCTS.calories) " +
"FROM " +
"MEAL_TO_DISHES_COMPOSITION, DISH_TO_PRODUCTS_COMPOSITION, PRODUCTS " +
"WHERE MEAL_TO_DISHES_COMPOSITION.dish_id = DISH_TO_PRODUCTS_COMPOSITION.dish_id AND " +
"DISH_TO_PRODUCTS_COMPOSITION.product_id = PRODUCTS.id " +
"GROUP BY MEAL_TO_DISHES_COMPOSITION.meal_id, DISH_TO_PRODUCTS_COMPOSITION.product_id;"
我在简单的数据集上对其进行了测试。但是我没有考虑到某些事情的感觉并没有离开我,并且在某些情况下这个“请求”返回了不正确的数据。也许它可以更容易完成(我是 sql 新手)。
问题:这个“请求”中是否有任何错误?如果有,它们是什么?可以优化解决方案吗?

可以使用 JOIN 优化解决方案的速度。提交的查询本身可以正常工作。