2016-12-16 60 views
0

在這個應用程序,我需要做一個查詢似乎是不可能的(經過數小時的嘗試和嘗試)的工作。Mysql如何選擇SUM基於列其他表

雖然,我不得不承認,我對查詢有點生疏!

無論如何,讓我們假設有這3個表:

膳食

id name 
-- ---- 
1 meal1 

食品

id name kcal kj 
-- ---- ---- -- 
1 food1 200 200 
2 food2 300 300 

Meal_food

m_id f_id percentage_food_in_meal 
---- ---- ---- 
1 1 0.60 
1 2 0.40 

我想要選擇的是:一餐,與大卡,kj(和其他)屬於這種餐基於的百分比。

正如我試過了,我已經試過了,但我可以告訴你最近的,我可以得到:

SELECT 
    m.*, 
    SUM(f.kj), -- <- should be based on the percentage 
    SUM(f.kcal) -- <- should be based on the percentage 
FROM 
    meal m, 
    meal_food mf, 
    food_nl f 
WHERE 
    m.id = mf.meal_id 
AND 
    f.id = mf.food_id 
GROUP BY 
    m.id; 

正如評論說:在基於百分比缺失。 嘗試內部連接,外部連接,交叉連接,子查詢,所以我想知道是否有可能。

希望我的問題關於我想要得到的是清楚的,如果不是,我會很樂意再試一次!

更新 例如作爲輸出:

id name kcal kj 
-- ---- ---- --- 
1 meal1 240 240 

澄清: meal1由2食品(配料):

  • 總膳食千卡== 60%千卡食物1 + 40 %kcal food2
  • 總膳食kj == 60%kj food1 + 40%kj food2
+1

我不知道你所說的「根據百分比」的意思。你能顯示一些示例輸出嗎? – shmosel

+0

@shmosel我會更新 –

回答

1

未測試:

SELECT 
    m.id, MIN(m.name) AS meal_name, 
    SUM(f.kj*mf.percentage_food_in_meal), 
    SUM(f.kcal*percentage_food_in_meal) 
FROM meal m 
INNER JOIN meal_food mf 
ON m.id = mf.meal_id 
INNER JOIN food_nl f 
ON f.id = mf.food_id 
GROUP BY m.id; 
+0

冬青F,你是怎麼做的?這似乎是正確的!耶穌如此簡單,非常感謝 –