Поиск пропусков в таблице
У нас тут сегодня на работе возникла гипотетическая потребность найти пропуски в конкретной таблице базы данных. Так как я кроме как с MySQL в последнее время ни с чем не имел, прикинул как бы я решил эту задачу там. Получилось
SELECT id FROM (
SELECT id, id-@prev AS diff, @prev:=id
FROM
(SELECT @prev:=NULL) ``,
sourceofdata
ORDER BY id
) `` WHERE diff>1Внутри есть напрасный запрос «SELECT @prev:=NULL», который там только затем, чтобы решение получилось в одну строку.
Может
Комментарии 9
В Oracleкак-то так:
Для других баз можнокак-то так:
Прочитал про LAG, спасибо! Не работал с аналитическими функциями, буду знать!
Тут умножение же таблиц, не сказал бы что так лучше.
Без привязки к конкретной СУБД нельзя сказать, что будет быстрее. Для MySQL скорее ваш первый вариант предпочтительнее, а Oracle вполне себе соптимизирует мой вариант (но аналитические функции всё равно быстрее будут).
Например 1, 2, 3, 4, 6, 7 -- пропущено 5?
select t1.id+1 from table_name t1 left join table_name t2 on t2.id=t1.id+1 where t2.id is null