|
|
|
| Поле id (unsigned int) таблицы table хранит некий набор чисел.
Напишите запрос, который определит все пропущенные значения (или диапазоны значений) для этого поля. По возможности желательно избегать использования вложенных подзапросов и/или временных таблиц.
Делаем вспомогательную таблицу (vs), заполненную числами от 1 до ... И объединяете с основной
select vs.id from vs left join `table` t using(id) where t.id is null;
Этот вариант решения не устроил моих работодателей, они написали следующее - sql запрос можно написать без использования временной(вспомогательной)
таблицы. | |
|
|
|
|
|
|
|
для: zagazz
(06.09.2011 в 18:52)
| | Можно поступить следующим образом (нечетные номера - начала интервалов, четные - концы)
SELECT
fst.id
FROM
vs AS fst
LEFT JOIN
vs AS snd
ON fst.id = snd.id + 1
LEFT JOIN
vs AS thd
ON fst.id = thd.id - 1
WHERE
snd.id IS NULL OR
thd.id IS NULL
ORDER BY fst.id
|
| |
|
|
|