我是usq sqlite3(在Android上)并尝试返回默认值,如果select必须处理NULL
值。
通常这有效:
SELECT ifnull(NULL, 12);
12
使用变量: SELECT ifnull(var,21)from(select NULL as var); 21
但是当我使用一张桌子并且这张桌子是空的时候,我什么都没得到:
SELECT ifnull(_id, 1) FROM empty_table;
<nothing here>
即使返回一个简单的数字也是不可能的:
SELECT 123;
123
SELECT 234 FROM empty_table;
<nothing here>
为什么会这样?我怎样才能从中获得价值呢?
答案 0 :(得分:4)
有点不同。
对行使用SELECT时,ifnull()每行计算一次,因此至少需要一行。
你可能会尝试一下:
SELECT IFNULL((SELECT _id FROM empty_table LIMIT 1), 1)
答案 1 :(得分:3)
select 1 from the_table
SQL为每个输入行返回一行(最多)。如果表是空的,则不会获得单行。 如果表有一万行,你将获得一万次数字1(即使你的程序可能只选择第一个,它的效率有点低。)
SELECT ifnull(_id, 1) from the_table
这也是一种非常明确的行为:没有任何ORDER BY,你只会得到一个随机的_id。
select 1
如果没有表(并非所有数据库都支持此表),就像从只有一行(而且没有列)的表中进行选择。
我怎样才能从中获得价值?
怎么样
select ifnull(max(_id), 1) from the_table
即使表格为空,也总是会返回一行,并且您知道要获得哪个_id。
答案 2 :(得分:1)
你做不到。不包含行的表中的列不等于空值
答案 3 :(得分:1)
ifnull(_id, 1)
检查查询结果的每一行中_id
的值是否为null
。
如果表是空的,则没有要检查的行,因此ifnull
永远不会被测试。