2015-07-20 50 views
1

你好夥計Stackoverflowers!我有一個查詢我正在努力,我需要篩選出0的,但它並沒有刪除這些記錄,我似乎無法弄清楚爲什麼。mySQL COALESCE過濾

請參考下面,

SELECT disb_sum, pl_balance, 
     COALESCE(p.pl_balance - pd.disb_sum, p.pl_balance - 0) AS pledge_balance 
FROM  contacts c 
LEFT JOIN pledges p ON c.c_no = p.c_no 
LEFT JOIN (
     SELECT pl_no, disb_status, disb_no, disb_amount, SUM(disb_amount) AS disb_sum 
     FROM  disbursements 
     WHERE disb_status = 1 
     GROUP BY pl_no 
     ) pd ON p.pl_no = pd.pl_no 
GROUP BY p.pl_no 
HAVING pledge_balance > "0" 
ORDER BY c.c_last 

輸出

# disb_sum, pl_balance, pledge_balance 
NULL, '5000.00', '5000.00' 
NULL, '5000.00', '5000.00' 
'25000.00', '25000.00', '0.00' 
NULL, '100000.00', '100000.00' 
NULL, '6000.00', '6000.00' 
NULL, '2500.00', '2500.00' 
NULL, '1500.00', '1500.00' 

我試圖增加額外的參數和disb_sum <> disb_sum但得到相同的結果集。

回答

0
GROUP BY p.pl_no  
HAVING pledge_balance > "0" 

試試這個:

WHERE pledge_balance > "0" 
GROUP BY p.pl_no 

我不明白你爲什麼是由列編組,因爲它不是一個ResultSet列反正。

+0

嘿@Niloct,好點。我嘗試了你的建議,但我仍然得到相同的結果集。感謝您的支持! –

0

如果Niloct的回答不行,請嘗試:

HAVING pledge_balance <> "0" 
+0

感謝@AdrianLynch,但我仍然得到相同的結果。 –

0

我的猜測是,pledge_balance大於零。但是,這是0.0001。如果你使用的是浮點數而不是定點數,這尤其是可能的。

所以,你可以嘗試:

HAVING pledge_balance > 0.005 
+0

謝謝@GordonLinoff,但我仍然得到相同的結果:(我試過.005和.0001 –

+0

@ chasecabrera ......嗯,這似乎表明這個理論是不正確的。用單引號?這是非常可疑的,因爲'SELECT'中的值只會是數字。 –

+0

完全同意,我檢查了列類型,並且都讀取爲小數(12,2),因此沒有類型差異。 –

0

我無法弄清楚哪些問題是具有參數我的,所以我加載查詢到一個臨時表和過濾這種方式。謝謝你們的及時反饋和幫助!