我有一個非常大的mysql調用,我不打算將它顯示出來,因爲它並不重要。這是一個需要修改之前做工精細的部分是這樣的:如何在COALESCE調用期間正確解析空值
COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',
這將返回所有apFunReq
值在多個表中,如果不考慮空或填充。工作很好,沒有問題。
現在已經決定我們需要另外一個表數據來加入這個過程,但是所需的數據並不是全部放在這個新表的一列中,而是需要將它們統一加在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',
現在,這對結果的新表中的行不實際工作,但它打破了原先預想返回OK的顯著部分。現在很多其他表的值只是返回爲0.
很明顯,我需要返回空值爲0爲d10內的數據,以增加工作,但我希望其他表中的空值保持爲空,並且我希望所有表格的數據能夠按照需要明顯工作。
我不知道我在做什麼錯誤,以獲得所需的結果。有人可以幫助我嗎?
Ç
好吧,是的。 coalesce按順序掃描參數並返回第一個非空的參數。因爲你的'ifnull()'鏈或者返回那個或者一個零,它的定義從不爲空,並且聚結總是會在那裏停止。將其移動到合併呼叫 –
中的最後一個位置或者,如果由於它優先於後面的字段而不能位於最後位置,則可能必須將該討厭的數學位包裝爲CASE或IF語句以當返回值爲0時吐出NULL。它看起來不會很優雅,並且可能會有更奇妙的做法,但最終當它爲0時,它必須返回NULL。 – JNevill
我認爲可以轉向最後的位置,但是如果再添加另一個類似的另一個表的調用會發生什麼?此外,它似乎以前爲空返回(他們被要求)現在返回爲0.這可以很容易地修復或將變得更加混亂和複雜? – Cassandra