嗨,我在 php 中有这段代码来更新 $table5 中的余额字段。现在我的问题是,当两个字段之一即add
或sub
为 NULL 时,这不会返回余额。
$fetch_balance = mysql_query("SELECT (SUM (IFNULL(`add`,0))-(SUM (IFNULL(`sub`,0))) AS `bal` FROM `".$table5."` ");
请帮忙。
我试过你的查询,它工作得很好,经过一些细微的调整:http ://sqlfiddle.com/#!2/a6220/4
最终查询应如下所示:
SELECT (SUM(IFNULL(add,0)))-(SUM(IFNULL(sub,0)))
AS bal FROM ".$table5."
您忘记添加)
,而且在 SUM() 之后还有空格。SUM 是一个函数,因此在()
.
您的查询简化为语法正确:
SELECT SUM(IFNULL(`add`, 0) - SUM(IFNULL(`sub`, 0) AS `bal`
FROM `".$table5."`;
假设表有行,那么这将返回单个非 NULL 值bal
。如果表没有行,那么它将返回NULL
.
你可能想要这个逻辑:
select coalesce(sum(`add`), 0) - coalesce(sum(`sub`), 0) as bal
from . . .;
仅当整个sum()
is时才进行替换NULL
。sum()
聚合函数将值NULL
视为0
.
注意:我将ifnull()
函数替换为 ANSI 标准等效项coalesce()
。
create table foo (bar1 integer, bar2 integer);
insert into foo (bar1, bar2) values (null, 1);
insert into foo (bar1, bar2) values (1, null);
select sum(coalesce(bar1, 0) + coalesce(bar2, 0)) from foo;
>2
select sum(bar1 + bar2) from foo;
>null
编辑提示:尝试这样的事情:
SELECT SUM ( IFNULL(`add`,0) - IFNULL(`sub`,0) )