2012-04-28 90 views
0

如果makale_payments表爲空,則查詢返回null。如何設置查詢喲獲得recors如果不存在SUM(payment_total)像0.00?帶加減值的mysql連接查詢null

SELECT article_name,user_real_name,user_name,SUM(`article_payment`) as holding,paid 
FROM makale_articles AS t1 
JOIN makale_users ON (t1.article_name=makale_users.user_id) 
JOIN (SELECT user_id,SUM(`payment_total`) as paid FROM makale_payments GROUP BY user_id) AS t2 ON (t1.article_name=t2.user_id) 
GROUP BY t2.user_id 

回答

0

即使專門測試了ISNULL,MySQL也不會返回返回空值的行的聚合值。 ISNULL僅用於檢查列是否爲空,而不是如果關係返回null。然而,我發現了一個(儘管很晦澀)的方法來解決這個限制。基本前提是聯合所有兩個sql語句並使用兩個聯合查詢作爲子查詢來從中進行選擇。

的聯合在一起queryies會的形式爲:

select column1, column2, SUM(column3) as payment from tablea, tableb where.... 
    union all 
    select column1, column2, 0.00 as payment from tablea --notice no join, and a specified value and alias for aggregate column 

有了上面的查詢,你會得到兩行,每行的關係不是零和一排當它。如果你將這些行相加並分組,那麼你應該得到你想要的值。所以,你再創建一個使用上面的表中,從選擇,歸納彙總列的查詢:

select column1, column2, SUM(payment) from 

    (select column1, column2, SUM(column3) as payment from tablea, tableb where.... 
    union all 
    select column1, column2, 0.00 as payment from tablea) as b 
    group by column1, column2 

我大概是掉在查詢的語法,對不起,我沒有的MySQL在這裏測試。

1

這是IFNULL是:

IFNULL(SUM(...), 0.0) 
+0

再次返回空... – 2012-04-29 00:15:41

0

一個簡單的WHERE不會傷害我猜

WHERE SUM(`article_payment`) > 0 
+0

#1064 - 您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第5行的WHERE SUM('article_payment')> 0極限0,30'處使用正確的語法 – 2012-04-29 00:13:37

+0

嘗試使用此WHERE SUM(t1.article_payment)> 0' – Starx 2012-04-29 00:17:16

+0

nope ...返回null – 2012-04-29 00:19:32

1

article_payment可能是NULL一些行。試試這個:

SELECT 
    article_name, 
    user_real_name, 
    user_name, 
    SUM(COALESCE(`article_payment`, 0)) as holding, 
    paid 
FROM article_articles AS t1 
JOIN article_users ON (t1.article_name=article_users.user_id) 
JOIN (
    SELECT user_id, SUM(COALESCE(`payment_total`, 0)) as paid 
    FROM article_payments 
    GROUP BY user_id 
) AS t2 ON (t1.article_name=t2.user_id) 
GROUP BY t2.user_id 
+0

查詢返回再次null .. – 2012-04-29 00:11:33

+1

@ dr.linux - 我見過你的sqlfiddle,我的查詢似乎正在工作(在用'makale_'更新表名之後):http://sqlfiddle.com/#!2/2cd06/12 – bfavaretto 2012-04-29 01:10:36

+0

article_payments不爲null請清除數據表並嘗試查詢。 – 2012-04-29 01:15:25