2012-04-28 136 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