Android Room/SQLite含min()查询无匹配时返回空结果的实现
在SQLite/Android Room中解决聚合函数返回全null行的问题
当查询中包含min()这类聚合函数时,即便WHERE条件没有匹配到任何记录,SQLite也会返回一行所有列均为null的结果——这是聚合函数的默认行为:对空数据集执行聚合操作时,仍会生成一条统计结果行。
要实现无匹配条目时直接返回空结果,且用简洁的单查询(无需子查询),可以通过HAVING子句过滤聚合后的结果:
SELECT id, data, min(time) FROM MyTable WHERE id = 123 HAVING COUNT(*) > 0
原理说明:
COUNT(*)用于统计WHERE条件匹配到的记录总数,当无匹配时结果为0- HAVING子句在聚合操作完成后执行过滤逻辑,
COUNT(*) > 0会直接排除掉无匹配时生成的全null行,最终返回空结果集
这个写法完全兼容SQLite以及Android Room Library,满足你对简洁单查询的要求。
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

