【发布时间】:2014-02-18 15:15:47
【问题描述】:
我有 2 个包含部分相同列的表,我想将它们合并到一个查询中:
table 1
|id |user |amount |date
|1 |4 |1000 |2014-01-01 01:00:00
|2 |1 |2000 |2014-01-01 01:00:00
|3 |2 |1500 |2014-01-01 01:00:00
table 2
|id |user |amount |date |flag
|1 |4 |1000 |2014-01-01 01:00:00 |0
|2 |3 |2000 |2014-01-01 01:00:00 |1
|3 |5 |1500 |2014-01-01 01:00:00 |2
我想列出两个表共有的内容,但我想添加金额列。因此,如果用户在表 1 和表 2 中,即使在这两个表中多次出现,它也应该只在结果中列出他 1 次,但数量应该加起来。
所以结果应该如下:
result
|user |amount |date
|4 |2000 |2014-01-01 01:00:00 <- note the 2000 here (1000+1000)
|1 |2000 |2014-01-01 01:00:00
|2 |1500 |2014-01-01 01:00:00
|3 |2000 |2014-01-01 01:00:00
|5 |1500 |2014-01-01 01:00:00
我想到了类似的查询
SELECT user, amount, date FROM (
(SELECT user, amount, date FROM table1)
UNION
(SELECT user, amount, date FROM table2)
) t1
但这并没有将金额值相加,并且条目会被多次列出。
如果我使用GROUP BY,它只会列出 1 次条目,但条目会被删减,这意味着数量也不会加起来。使用 SUM,它只添加所有条目并显示 1 个条目,但我需要将所有条目与金额列相加 1 次。
【问题讨论】: