SQLite – 获取数据库中的行数
我想使用max(id)
在我的表中获得多个行。 当它返回NULL
– 如果表中没有行 – 我想返回0.当有行我想返回max(id) + 1
。
我的行正在从0编号和自动增加。
这是我的陈述:
SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words
但它总是回报我0.我做错了什么?
如果你想使用MAX(id)而不是count,在阅读Pax的注释之后,下面的SQL会给你想要的东西
SELECT COALESCE(MAX(id)+1, 0) FROM words
在SQL中,NULL = NULL是错误的,你通常必须使用IS NULL:
SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words
但是,如果你想要的行数,你应该只使用count(id)
因为你的解决scheme将给10,如果你的行是(0,1,3,5,9)它应该给5。
如果你可以保证你总是从0到N,那么根据索引的实现,max(id)+1 可能会更快(遍历平衡树的右边可能会更快,而不是遍历整个树。
但是,这是非常具体的实现,我build议不要依赖它,不仅仅是因为它将性能locking到特定的DBMS。
不知道,如果我理解你的问题,但最大(ID)不会给你所有的行数。 例如,如果你只有一行id = 13(假设你删除了前面的行),你将有max(id)= 13,但是行数是1.正确的(和最快的)解决scheme是使用计数()。 顺便说一句,如果你想知道为什么有明星,这是因为你可以根据标准来计算线条。
我得到了同样的问题,如果我正确理解你的问题,我想知道在SQLite操作每插入性能后最后插入的ID。 我试了下面的声明:
select * from table_name order by id desc limit 1
该id是table_name的第一列和主键,上述语句显示了具有最大id的logging。
但前提是你永远不会删除任何一行,所以id的数字等于行数。
扩展了VolkerK的答案,为了使代码更具可读性,可以使用AS来引用计数,例如:
SELECT COUNT(*) AS c from profile
这使得在一些框架中读取更容易,例如,我使用Exponent(React Native)Sqlite集成,没有AS语句,代码非常难看。