我希望在我的表中使用多行max(id)
.当它返回时NULL
- 如果表中没有行 - 我想返回0.当有行时我想返回max(id) + 1
.
我的行从0开始编号并自动增加.
这是我的发言:
SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words
但它总是让我回归0.我做错了什么?
您可以使用查询实际行数
SELECT Count(*) FROM tblName请参阅https://www.w3schools.com/sql/sql_count_avg_sum.asp
如果你想使用MAX(id)而不是count,在阅读了Pax的注释后,下面的SQL将为你提供你想要的
SELECT COALESCE(MAX(id)+1, 0) FROM words
在SQL中,NULL = NULL为false,您通常必须使用IS NULL:
SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words
但是,如果你想要行数,你应该使用,count(id)
因为你的解决方案将给出10,如果你的行是(0,1,3,5,9)它应该给5.
如果你可以保证你总是从0到N的id,那么max(id)+1 可能会更快,具体取决于索引实现(遍历平衡树的右侧而不是遍历整个树可能会更快,计数.
但这是特定于实现的,我建议不要依赖它,尤其是因为它将您的性能锁定到特定的DBMS.