Выбрать следующий свободный номер в диапазоне чисел из таблицы Mysql - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь написать запрос, который выбирает следующий свободный номер из таблицы, где номер должен быть от 2000 до 2500

У меня есть таблица:

|   id  | number  |
|-------|---------|
| 1     | 1000    |
| 2     | 1001    |
| 3     | 3000    |

Я хочу получить 2001

У меня sql:

SELECT number + 1 next_number
FROM table t
WHERE NOT EXISTS( 
SELECT * FROM table
WHERE number = t.number + 1)
ORDER BY number LIMIT 1

И он возвращает мне 1002.

Я пробовал:

SELECT number + 1 next_number
FROM table t
WHERE number + 1 BETWEEN 2000 AND 2500
AND NOT EXISTS( 
SELECT * FROM table
WHERE number = t.number + 1)
ORDER BY number LIMIT 1

И ничего не получил.

Однако, если я добавлю номер 2000 в таблицу, он вернет 2001.

Как исправить этот запрос, чтобы вернуть 2001, даже если в таблице нет номера 2000?

Ответы [ 2 ]

1 голос
/ 07 мая 2020
SELECT MIN(`number`) + 1 result
FROM ( SELECT `number`
       FROM test
       WHERE `number` BETWEEN @from AND @till
       UNION 
       SELECT @from ) tmp
WHERE NOT EXISTS ( SELECT NULL
                   FROM test
                   WHERE `number` = tmp.`number` + 1 )
HAVING result <= @till;

скрипка

0 голосов
/ 07 мая 2020

В вашем коде вы должны проверить нулевой результат

select next_number from (
    SELECT ifnull(number + 1,2001) next_number
    FROM table t
    WHERE number + 1 BETWEEN 2000 AND 2500
    UNION 
    SELECT ifnull(number + 1,2001)
) t

ORDER BY next_number LIMIT 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...