sql查询获取下一个免费ID

时间:2017-09-07 12:20:48

标签: mysql sql

我有一个大脑故障但没有为我的查询找到正确的解决方案。可能有人有想法吗?

我希望通过以下where子句找到下一个免费号码:

我的SQL代码是:

SELECT min(`no` + 1) AS nextNo 
FROM `table1` 
WHERE `no` + 1 not in (
  SELECT `no` 
  FROM `table1` 
  WHERE `sno` = 20 
)

这是我的表值:

id=1, no=1, sno=20

如果是sno=20,那么nextNo=2的结果是正确的。

但是,如果我使用sno=10,我**nextNo**=2的结果而不是1

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我建议您只给出一个超过给定sno的最大值:

select coalesce(max(no) + 1, 1)
from table1 t1
where sno = 20;

如果你真的想填补空洞(这通常不是一个好主意):

select coalesce(min(t1.no) + 1, 1)
from table1 t1
where t1.sno = 20 and
      not exists (select 1
                  from table1 tt1
                  where tt1.sno = t1.sno and tt1.no = t1.no + 1
                 );

答案 1 :(得分:1)

您的疑问令人困惑,请向我们提供更多详情。如果要查找table1中没有的下一个号码,可以使用

SELECT max(`no`) + 1 AS nextNo FROM `table1`

你的查询为sno = 10返回2,因为你的where条件含糊不清并且所有值都是真的。