如何删除连接dbms

时间:2017-02-03 15:48:12

标签: mysql

我必须在mysql中表收入和支出。

收入表

sn
i_type
u_id
year
month
inc_amount

费用表

sn
e_type
u_id
year
month
exp_amount

我想加入上面的两个表来计算收入总和,每月和每年的费用总和。我写了以下查询:

select income.year,income.month,sum(income.inc_amount),sum(expense.exp_amount) 
from income,expense 
where income.u_id=expense.u_id, income.year=expense.year,income.month=expense.month 
group by income.year,income.month

避免查询显示金额的笛卡尔和。即如果收入表中有特定u_id,年,月的三条记录,则同一个u_id,年,月的记录有2条。它给出了收入金额的总和是实际金额的2倍,因为第一个收入表的1个记录与两个费用表记录相结合。同样,由于第二张表的每张记录与第一张表中的3张记录相结合,费用金额之和为3倍。

1 个答案:

答案 0 :(得分:1)

您可以对两个表使用UNION,然后获取聚合。

select ie.year, ie.month, sum(ie.inc_amount), sum(ie.exp_amount)
from 
     (
     select year, month, inc_amount, 0 as exp_amount from income
     UNION
     select year, month, 0 as inc_amount, exp_amount from expense
     ) ie
group by ie.year, ie.month

注意我已经在每个表上添加了一个额外字段,其值为0,只是为了在最终结果中获得相同数量的字段。