我有一个带有数字列的表。有数据记录,以示例 { 1,7, 10, 11, 12, 19, 20} 为例。我想使用 SQL 从特定 x 获取下一个“空闲”号码:
>8 for x=7
>8 for x=8
>13 for x=10
>21 for x=20
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?
好的:我想插入带有“x”的内容。该列是唯一的,因此当表中已经有“7”时,我无法将 x=7 的内容放入表中。所以我想要一个例程,如果已经存在带有“7”的记录,则返回“8”。如果已经有“8”,则为“9”。
在伪 SQL 中:
x = 7 // for example
select COL from myTable where COL= (x or if x does not exist, the y : y > x, y - x smallest possible)
Run Code Online (Sandbox Code Playgroud)
Oracle 11g R2 架构设置:
CREATE TABLE NUMBERS
("NUM" int)
;
INSERT ALL
INTO NUMBERS ("NUM")
VALUES (1)
INTO NUMBERS ("NUM")
VALUES (7)
INTO NUMBERS ("NUM")
VALUES (10)
INTO NUMBERS ("NUM")
VALUES (11)
INTO NUMBERS ("NUM")
VALUES (12)
INTO NUMBERS ("NUM")
VALUES (19)
INTO NUMBERS ("NUM")
VALUES (20)
SELECT * FROM dual
;
Run Code Online (Sandbox Code Playgroud)
查询1:
select min(n.VAL) as NextFree
from (
SELECT LEVEL as VAL
FROM DUAL
CONNECT BY LEVEL <= 100000
ORDER BY LEVEL
) n
left outer join NUMBERS d on n.VAL = d.NUM
where d.NUM is null
and n.VAL >= 10
Run Code Online (Sandbox Code Playgroud)
结果:
| NEXTFREE |
|----------|
| 13 |
Run Code Online (Sandbox Code Playgroud)