MySQL空表下MAX()返回NULL,如何获取空结果集?
解决MySQL空表时MAX()返回NULL行的问题
要实现orders表为空时返回空结果集,而非带NULL的行,可以用以下两种简洁的方法:
方法1:使用HAVING子句过滤NULL结果
利用聚合函数MAX()在空表时返回NULL的特性,通过HAVING子句过滤掉NULL结果,当表为空时查询不会返回任何行:
SELECT MAX(customer_number) AS customer_number FROM orders HAVING MAX(customer_number) IS NOT NULL;
原理:HAVING用于筛选聚合后的结果,当表为空时MAX(customer_number)为NULL,不满足IS NOT NULL的条件,因此查询返回空结果集;当表有数据时,MAX()返回有效值,符合条件则返回该行。
方法2:用EXISTS判断表是否存在数据
通过WHERE EXISTS先检查表中是否有记录,只有当表存在数据时才执行MAX()查询:
SELECT MAX(customer_number) AS customer_number FROM orders WHERE EXISTS (SELECT 1 FROM orders);
原理:EXISTS (SELECT 1 FROM orders)在表为空时返回false,整个查询的WHERE条件不成立,因此无结果返回;表有数据时条件成立,正常返回最大的customer_number。
两种方法都能满足需求,可根据习惯选择使用。
内容的提问来源于stack exchange,提问作者Shripad Khandare
相关产品推荐
相关产品推荐

