Выберите несуществующее значение из MySQL - PullRequest
0 голосов
/ 12 мая 2011

Существует таблица "tbl" с уникальными значениями "val" из определенного диапазона (например, от 100 до 999).

Необходимо выбрать гарантированное значение, которого еще нет в таблице, без помощи дополнительной таблицы со всеми существующими значениями в левой ассоциации.

Например.

Заполнение вспомогательной таблицы (весь диапазон) значениями от 1 до 9.

Базовая структура таблицы:

CREATE TABLE `ranger` (
  `val` int(2) unsigned NOT NULL,
  UNIQUE KEY `val` (`val`)
) ENGINE=MyISAM;

INSERT INTO `ranger` (`val`) VALUES (1), (2), (4), (5), (6), (7), (8);

Чтобы выбрать несуществующее значение из ranger:

SELECT 
    val
FROM 
    ranger_helper
WHERE 
    val NOT IN(SELECT val FROM ranger)
ORDER BY 
    RAND() 
LIMIT 
    1

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

В MySQL нет генератора чисел. Смотрите этот вопрос и ответ:

Как мне сделать генератор строк в MySQL?

В лучшем случае вы можете получить его из диапазона, используя анти-объединение:

select id from foo where id not in (...);
0 голосов
/ 12 мая 2011
SELECT id FROM myTable WHERE id NOT IN (100,101,102,103...,999);

может работать, если вы легко извлекаете диапазон извне

Другим подходом может быть создание хранимой процедуры и получение диапазона с помощью цикла WHILE или запроса для каждого значения в таблице..

...