mysql - MySQL:连接 3 个具有不同值的表
问题描述
所以我有3个表:tableA,tableB,tableC,结构如下
表A
ID | 姓名 | 状态 |
---|---|---|
1 | 射线 | 医学博士 |
2 | 山姆 | 洛杉矶 |
3 | 约翰 | 纽约 |
表B
ID | 援助 | 数量 | 代码 |
---|---|---|---|
1 | 2 | 10 | 收费 |
2 | 2 | 20 | 收费 |
3 | 3 | 70 | 收费 |
表C
ID | 援助 | 数量 | 代码 |
---|---|---|---|
1 | 2 | 50 | 收费 |
2 | 2 | 40 | 订金 |
3 | 1 | 60 | 收费 |
我需要连接的输出如下:
援助 | 数量 |
---|---|
1 | 60 |
2 | 30 |
3 | 70 |
所以,这里它根据tableA中的id计算金额的总和。它检查表 B 的金额,如果不存在,则检查表 C。这就是为什么 id 2 的输出量为 30。
但实际发生的是两个表的总和相加。所以我得到 id 2 的金额 120。如何获得所需的输出?
所以我在这里尝试了这个查询
Select if( SUM(CASE WHEN B.code != 'DEPOSIT'
THEN B.amount
ELSE 0 END) > 0,
SUM(CASE WHEN B.code != 'DEPOSIT'
THEN B.amount
ELSE 0 END),
SUM(CASE WHEN C.code != 'DEPOSIT'
THEN C.amount
ELSE 0 END)) as total
FROM tableA as A
left join tableB AS B on A.id=B.a_id
LEFT JOIN tableC AS C on A.id=C.a_id
GROUP BY A.id
解决方案
您可以尝试这样的解决方案
Select A.id, SUM(if(B.amount is NOT NULL,B.amount, C.amount)) as total
FROM tableA as A
LEFT JOIN tableB AS B on A.id=B.a_id and B.code != 'DEPOSIT'
LEFT JOIN tableC AS C on A.id=C.a_id and C.code != 'DEPOSIT'
GROUP BY A.id
推荐阅读
- javascript - webpack-cli 错误:编译规则集失败
- python - 在 Keras 中训练模型时的值错误
- django - Django Forms:RelatedManager' 对象没有属性
- shopify - 根据客户位置自动履行订单 - 应用建议?
- sql-server-2016 - 在不考虑周六和周日的情况下生成指标
- mysql - Laravel GroupBy 和 OrderBy 排序问题
- can-bus - 在 SDO 块传输中可以使用的最大大小是多少?如何使用?
- mysql - 从星期日生成日期,除了现有值,在 1 周范围内
- python-3.x - 重新分配具有相同数组的多个列
- angular - 是否有可能在 Angular 中使我的
是一个html标签?