【发布时间】:2021-11-14 01:28:10
【问题描述】:
这是我的数据库架构简化:
// wallet
+----+--------+---------+
| id | credit | user_id |
+----+--------+---------+
| 1 | 1000 | 1 |
| 2 | 1500 | 2 |
+----+--------+---------+
// where_to_pay_ability
+----+-------------+-----------+
| id | business_id | wallet_id |
+----+-------------+-----------+
| 1 | 5 | 1 |
| 2 | 4 | 1 |
+----+-------------+-----------+
这是我当前的查询:
select sum(credit)
from wallet w
left join where_to_pay_ability wtpa on w.id = wtpa.wallet_id
where user_id = 1
返回2000。因为where_to_pay_ability 表中有两行。这对我来说是一个错误的信用。我想在wallet 表中使用一次sum 行。所以,预期的结果是1000。
我该怎么做?
需要注意的是,我可以通过GROUP BYed wallet_id(或DISTINCT)的子查询来做到这一点left join。但是,我需要那些business_ids。
所以,我需要在SUM() 中添加一个条件,以避免计算由连接引起的行。
【问题讨论】:
-
如果您不访问其他表中的任何数据,为什么不删除
JOIN? -
好吧@NicoHaase,正如我所说,这是我想要的简化版本.. 实际上,我需要从
wallet和where_to_pay_ability表中选择所有列。