2

这个问题解释了如何在表中找到第一个“未使用”的数字,但我怎样才能找到相同的数字,以便我可以定义额外的约束。如何更改查询,以便获得大于 100 的第一个未使用的数字

例如,如果我的桌子上有 23、56、100、101、103,我应该得到 102。

4

5 回答 5

8

在 mysql 和 postgresql 中

SELECT  id + 1
FROM    test mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    test mi 
        WHERE   mi.id = mo.id + 1
        ) and mo.id> 100
ORDER BY
        id
LIMIT 1

mysql小提琴和postgresql的小提琴

在 ms sql 中

SELECT  TOP 1
        id + 1
FROM    test mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    test mi 
        WHERE   mi.id = mo.id + 1
        )
          and mo.id > 100
ORDER BY
        id

小提琴

于 2013-07-22T08:06:16.617 回答
4

在 Oracle Sql 中,您可以尝试:

SELECT id
FROM
     (SELECT ID, lead(ID) OVER(ORDER BY ID) next_val FROM my_table t
     )
WHERE id +1 <> next_val
 AND id      >100;
于 2013-07-22T08:22:25.130 回答
1

希望对你有帮助

SELECT MIN (id) + 1
  FROM myTable T1
 WHERE id >= 100
   AND NOT EXISTS (SELECT *
                     FROM myTable T2
                    WHERE T1.id + 1 = T2.id)
于 2013-07-22T08:27:55.373 回答
0

用这个:

SELECT TOP 1 a1.id + 1 FROM test a1 left JOIN test a2 
ON a1.id = a2.id - 1 
WHERE a2.id IS NULL AND a1.id > 100
于 2014-04-23T07:05:30.003 回答
0

使用 generate_series() 来获得乐趣和利润:

CREATE table islands (num INTEGER NOT NULL PRIMARY KEY);

INSERT INTO islands (num ) VALUES
(23), (56), (100), (101), (103) ;

WITH total AS (
        SELECT generate_series(mima.bot, mima.top) AS num
        FROM ( SELECT MIN(num) AS bot , MAX(num) AS top FROM islands) mima
        )
SELECT num
FROM total tt
WHERE num >=100
AND NOT EXISTS (
        SELECT *
        FROM islands ii
        WHERE ii.num = tt.num
        )
        ;
于 2013-09-11T11:30:05.413 回答