我已编辑了我的问题。希望这会有所帮助......
我有两张桌子
表1 包含以下字段 ID, Incomehead subIncomeHead
表2 包含以下字段 ID, Incomehead, 量
我正在尝试在mySQL中创建一个SQL查询,从表1中获取所有唯一记录(tabel1.Incomehead)并从表2中获取金额(table2.amount),其中table1.incomehead = table2.incomehead。我还需要显示“0”,其中table2.amount不适用于特定的table1.incomehead。 table1中的主键是Incomehead和SubIncomehead。因此,将有一个场景,相同的Incomehead将重复,如下所述
快照
表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的唯一记录。但是,当存在多个相同值的记录时,它会给出不同的结果
希望这能澄清并期待您的支持
答案 0 :(得分:2)
您不需要UNION
。只需JOIN
两个表格,并使用SUM
与group 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
为空。
这会给你:
| Incomehead | Total |
|--------------|-------|
| Subscription | 600 |
| Donation | 100 |
| Collection | 0 |
旁注:您应该在两个表之间创建一个外键,而不是使用字符串值来连接它们,incomehead
的字符串值不应该重复两个表之间。而是从第二个表中删除它并创建一个新键incomeheadID
,它将成为第一个表的外键。