2017-07-25 88 views
0

我有四個表 用戶,工資,獎金,罰款 我要選擇的工資,包括我在每個表user_id說明一些用戶 所有獎金和處罰(工資,獎金,罰款) 如何我能做到這一點 可以有兩個或更多的獎金和懲罰 我試圖做與獎金MySQL的薪酬選擇

BEGIN 
    SELECT SUM(salary.salary) + SUM(bonus.bonus) - SUM(penalty.penalty) FROM users 
    INNER JOIN salary on salary.user_id = users.id 
    INNER JOIN bonus on bonus.user_id = users.id 
    INNER JOIN penalty on penalty.user_id = users.id; 
    END 

,但我不得不爲每個獎勵和懲罰 多個結果,我想只有一個號碼 謝謝大家幫忙

回答

1

假設給定用戶可以有多個記錄在每個salarybonus,並且penalty表,一個安全的方法在這裏是只聚集在獨立的子查詢的金額,然後連接在一起的結果:

SELECT 
    u.id, 
    COALESCE(s.salary, 0) + COALESCE(b.bonus, 0) - COALESCE(p.penalty, 0) AS amount 
FROM users u 
LEFT JOIN 
(
    SELECT user_id, SUM(salary) AS salary 
    FROM salary 
    GROUP BY user_id 
) s 
    ON u.id = s.user_id 
LEFT JOIN 
(
    SELECT user_id, SUM(bonus) AS bonus 
    FROM bonus 
    GROUP BY user_id 
) b 
    ON u.id = b.user_id 
LEFT JOIN 
(
    SELECT user_id, SUM(penalty) AS penalty 
    FROM penalty 
    GROUP BY user_id 
) p 
    ON u.id = p.user_id 

您可以在上面添加一個WHERE子句以限制爲一個或多個用戶,例如

WHERE u.id = some_value 
+0

什麼是u.id))我無法得到它,抱歉 –

+1

你知道什麼是_alias_嗎? 'u.id'或多或少意味着與'users.id'相同的東西。 –

+0

ty,我會嘗試它,並標記爲解決方案,如果它正確 –