如何从两个子表中获取SUM

时间:2014-05-12 18:25:56

标签: php mysql navicat

这是我第一次在这里发帖,我希望我没有做错任何事。

我确实得到了错误的结果,因为我不明白如何以正确的方式编写我的查询。

我有三个表,第一个是主表和2个相同的子表。 子表用于支出和收入。

表预测

id  forecast_id
1   721     
2   721
3   721 

表费用

forecast_id     amount      tax_free
721             100         0
721             200         1
721             300         0

表收入

forecast_id     amount      tax_free
721             50          1
721             100         0

SELECT
    t_forecast.forecastID,
    Sum(t_fc_einkauf.betrag) AS expense,
    Sum(t_fc_zahlung.betrag) AS income
FROM
    t_forecast
JOIN t_fc_einkauf ON t_fc_einkauf.forcastID = t_forecast.forecastID
JOIN t_fc_zahlung ON t_fc_zahlung.forcastID = t_forecast.forecastID
WHERE
    t_forecast.forecastID = 855
ORDER BY

我的结果错了

forcastID   expense     income
855         1200        450

应该是

forcastID   expense     income
855          600        150

1 个答案:

答案 0 :(得分:1)

您正在使用创建交叉产品行的联接,因此您获得的总和高于预期,请尝试使用相关子查询

SELECT
   DISTINCT f.forecast_id,
(SELECT SUM(e.amount) FROM expense e WHERE e.forecast_id = f.forecast_id )
AS expense,
 (SELECT SUM(i.amount) FROM income i WHERE i.forecast_id = f.forecast_id )
AS income
FROM
   forecast f
WHERE
    f.forecast_id = 721

Demo