【发布时间】:2019-02-26 01:00:48
【问题描述】:
我有两 (2) 张桌子: ps_wk_mp_seller_transaction_history
还有 ps_wk_mp_seller_order_status
仅当 current_state = 5
时,我才想合计 seller_amount为此我写了这个:
select sum(seller_amount) as seller_amount
from ps_wk_mp_seller_transaction_history th inner join
ps_wk_mp_seller_order_status os
on os.id_order = th.id_transaction and
os.current_state = 5 and
th.id_customer_seller = 2;
对于 id_customer_seller=2,我得到这个 4984.020000 (4950+34.02),它是准确的
但是对于 id_customer_seller=5,我得到 25.848000 而不是 NULL
有人可以帮我吗?
也许你可以自己测试一下,代码是:https://github.com/kulturman/fakerepo
【问题讨论】:
-
ON子句的最后一个谓词and th.id_customer_seller=?应该过滤掉id_customer_seller=5的所有记录。因此,在这种情况下,我看不出你怎么可能得到25.848。你能设置一个模型来演示你的问题吗? -
也许你可以自己测试一下,这个代码:github.com/kulturman/fakerepo
-
您的 dB 设计看起来有缺陷,或者至少无法达到您想要的效果。运行查询,在其中选择 * 并且仅加入 id_order 和 id_transaction,您将获得六行,涵盖卖方和状态的所有组合,这意味着您永远不会从原始查询中获得空值,因为至少会为任何行选择一个组合状态和卖方的有效组合
-
您的问题暗示您期望第一个订单状态行与前两个交易行关联,第二个订单状态要关联到最后一个事务行的行。但是,您的查询将 both 订单状态行与所有三个交易行相关联。 (就像@JoakimDanielson 所说,这会产生 6 种组合。) 所以,我的问题是 为什么 你认为 只有 第二个订单状态行关联到最后一个交易行? (这是我可以看到您期望结果为 NULL 的唯一方法。)
-
他的问题是
id_transaction与 current_state 5 和 14 相同,这就是为什么id_customer_seller不会为空
标签: mysql sql sum inner-join