首页 > 解决方案 > 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

标签: mysqljoin

解决方案


您可以尝试这样的解决方案

    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

推荐阅读