MySQL IF语句返回非空表达式值的语法错误求解
问题解决:修正SQL语法错误并实现需求
原语句的语法问题
你写的SQL里,在IF函数的条件部分给子查询加别名as expr是错误的——MySQL不允许在条件表达式里直接定义别名并立即引用,这就是触发#1064语法错误的原因。
正确实现方式
下面提供两种简洁且符合语法的写法,都能实现「子查询结果不为空时返回结果,为空时返回'0'」的需求:
方式一:使用IFNULL函数(推荐)
IFNULL是MySQL专门用来处理NULL值的函数,会直接判断第一个参数是否为NULL,是则返回第二个参数,否则返回第一个参数:
SELECT IFNULL( (SELECT SUM(kcal) FROM jadlospis WHERE data = "2022-07-18" AND uzytkownik_id = 1 GROUP BY DAY(data)), '0' );
方式二:使用COALESCE函数
COALESCE和IFNULL功能类似,支持传入多个参数,返回第一个非NULL的值:
SELECT COALESCE( (SELECT SUM(kcal) FROM jadlospis WHERE data = "2022-07-18" AND uzytkownik_id = 1 GROUP BY DAY(data)), '0' );
补充说明
因为你的子查询里WHERE指定了具体日期,再用GROUP BY DAY(data)只会返回一行结果(要么是计算出的SUM值,要么是NULL),所以上面两种写法都能正常工作。如果子查询可能返回多行,可以考虑用聚合函数包裹或者调整逻辑。
内容的提问来源于stack exchange,提问作者stealthoust
相关产品推荐
相关产品推荐

