我有一个大脑故障但没有为我的查询找到正确的解决方案。可能有人有想法吗?
我希望通过以下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
非常感谢您的帮助!
答案 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条件含糊不清并且所有值都是真的。