如何在 COALESCE 调用期间正确解析空值

How to resolve null values correctly during a COALESCE call

我有一个相当大的 mysql 电话,我不会费心展示它,因为它不是很重要。在需要修改之前工作正常的部分如下所示:

COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',

这将 return 多个 table 中的所有 apFunReq 值,无论是否为空或已填充。效果很好,没问题。

现在决定我们需要另一个 tables 数据来加入这个过程,但是所需的数据并没有全部放在这个新 table 的一列中,而是需要添加它总共超过 5 列。所以我实现了这个:

COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, (IFNULL(d10.reqFunding_01, 0) + IFNULL(d10.reqFunding_02, 0) + IFNULL(d10.reqFunding_03, 0) + IFNULL(d10.reqFunding_04, 0) + IFNULL(d10.reqFunding_05, 0)), d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',

现在这确实适用于结果中的新 table 行,但它打破了以前 return 正常的很大一部分。现在很多其他 table 的值只是 return 为 0。

显然,对于 d10 内的数据,我需要将 return 空值设置为 0 才能正常工作,但我希望其他 table 的空值保持为空,并且我希望所有 table 的数据显然都按预期工作。

我不确定为了获得预期结果我做错了什么。有人可以帮我解决这个问题吗?

C

解决此问题的简单方法是在将所有 IFNULLed 值相加后使用 NULLIF,如下所示:

 COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, 
   NULLIF(IFNULL(d10.reqFunding_01, 0) + IFNULL(d10.reqFunding_02, 0) + IFNULL(d10.reqFunding_03, 0) + IFNULL(d10.reqFunding_04, 0) + IFNULL(d10.reqFunding_05, 0), 0), 
   d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',

显然,如果 0 是有效答案,这将不起作用。