Closed. This question needs details or clarity。它目前不接受答案。
想改进这个问题吗?添加细节并通过editing this post澄清问题。
四年前关闭。
我修改了我的问题。希望这有帮助。。。。
我有两张桌子
表1包含以下字段
身份证件,
收入
亚收入阶层
表2包含以下字段
身份证件,
收入来源,
数量
我试图在mySQL中创建一个SQL查询,从中获取表1中的所有唯一记录(tabel1.Incomehead),并从表2中获取amount的总和(table2.amount),其中table1.Incomehead=table2.Incomehead。对于特定的table1.incomehead,如果table2.amount不存在,我还需要显示“0”。表1中的主键是Incomehead和SubIncomehead。因此,有一种情况下,相同的收入将重复如下所述
快照
表1
1|Subscription|Membership

2|Donation|Charity

3|Collection

4|Subscription|Carpark

5|Donation|Youth

表2
1|Subscription|100

2|Donation|100

3|Subscription|500

预期结果
Subscription|600

Donation|100

Collection|0

当Incomehead有一个唯一的记录时,下面的答案有效。但是,当有多个值相同的记录时,它会给出不同的结果
希望这一点澄清,并期待您的支持

最佳答案

您不需要UNION。只需JOIN这两个表,并将SUMgroup by一起使用:

SELECT
  t1.incomehead,
  SUM(COALESCE(t2.amount, 0)) AS Total
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t1.incomehead = t2.incomehead
GROUP BY t1.incomehead
ORDER BY total DESC;

LEFT JOIN将包括第一个表事件中的那些项,如果第二个表中没有匹配的行,那么它将有amount空值。
SQL Fiddle Demo
这将给你:
|   Incomehead | Total |
|--------------|-------|
| Subscription |   600 |
|     Donation |   100 |
|   Collection |     0 |

附带说明:您应该在两个表之间创建外键,而不是使用字符串值在它们之间连接,incomehead的字符串值不应该在两个表之间重复。相反,将其从第二个表中移除,并创建一个新的键incomeheadID,该键将是第一个表的外键。

07-24 15:00