SQLite Room查询需求:找到标签返回对应值,未找到则返回MAX(value)+1
SQLite 按标签查询:存在返回对应值,不存在返回MAX(value)+1
现有数据表(假设表名为your_table):
| value | label |
|---|---|
| 1 | art2 |
| 2 | art1 |
| 3 | art4 |
| 4 | art3 |
需求:查询指定label时,若标签存在则返回对应的value;若不存在则返回MAX(value)+1。例如查询label=art4返回3,查询不存在的标签返回5。
实现SQL语句
使用COALESCE函数结合子查询即可实现需求:
SELECT COALESCE( -- 优先查询匹配label的value (SELECT value FROM your_table WHERE label = 'art4'), -- 若标签不存在,返回最大value加1 (SELECT MAX(value) + 1 FROM your_table) ) AS result;
说明
COALESCE函数会返回第一个非NULL的结果:当指定label存在时,第一个子查询返回对应value,直接输出;当label不存在时,第一个子查询返回NULL,此时取第二个子查询的结果(表中最大value加1)。- 如果需要适配空表场景(表中无数据时),可以修改第二个子查询为
COALESCE(MAX(value), 0) + 1,这样空表时会返回1。
示例验证
- 查询存在的标签
art4:返回3 - 查询不存在的标签
art5:返回5
内容的提问来源于stack exchange,提问作者Chris972
相关产品推荐
相关产品推荐

