sqlite3从空表中选择=没有选择?

时间:2011-09-15 08:47:33

标签: database sqlite select

我是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>

为什么会这样?我怎样才能从中获得价值呢?

4 个答案:

答案 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永远不会被测试。