powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок ID
12 сообщений из 12, страница 1 из 1
Порядок ID
    #40013195
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Подскажите, пожалуйста, как найти отсутствующие id в таблице если порядок их записи прерывался. К примеру отсутствует 4 и 9 в списке Id:
1
2
3
5
6
7
8
0

Спасибо.
...
Рейтинг: 0 / 0
Порядок ID
    #40013196
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

соединить внешним соединением с таблицей-списком где такие данные точно есть. ну и проверять на is null
...
Рейтинг: 0 / 0
Порядок ID
    #40013198
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

такой таблицы к сожалению нет.
...
Рейтинг: 0 / 0
Порядок ID
    #40013201
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

емае, ну заведите, или сгенерите динамически:

Код: sql
1.
2.
3.
4.
5.
6.
with numbers as (
    select cast(1 as int) as [num]
      union all
    select cast([num] + 1 as int) from numbers where [num] < 1000000
)
select [num] from numbers option (maxrecursion 0);
...
Рейтинг: 0 / 0
Порядок ID
    #40013212
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Caxa_ASS,

емае, ну заведите, или сгенерите динамически:

Код: sql
1.
2.
3.
4.
5.
6.
with numbers as (
    select cast(1 as int) as [num]
      union all
    select cast([num] + 1 as int) from numbers where [num] < 1000000
)
select [num] from numbers option (maxrecursion 0);



Нафига козе баян?
Самосоединения хватит.
...
Рейтинг: 0 / 0
Порядок ID
    #40013214
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
felix_ff
Код: sql
1.
2.
3.
4.
5.
6.
with numbers as (
    select cast(1 as int) as [num]
      union all
    select cast([num] + 1 as int) from numbers where [num] < 1000000
)
select [num] from numbers option (maxrecursion 0);



Нафига козе баян?
Самосоединения хватит.
Чтоб медленнее. Раз уж делать таблицу в каждом запросе, а не один раз постоянную, то пусть прочувствуют!
...
Рейтинг: 0 / 0
Порядок ID
    #40013226
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS,

alex222 уже предложил решение через джойн, также можно через функцию lag().
Оба способа выявят границы обрыва последовательности, которые можно доработать до интервалов.

Джоид с временным вектором (мин,макс) даст полный список пропущенных ID
...
Рейтинг: 0 / 0
Порядок ID
    #40013229
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо всего лишь получить левую и правую границы диапазонов, не содержащих последовательные значения ID.
Требуется всего лишь NOT EXISTS() и никаких таблиц не надо.

Алекс, извини! Это же практически твой текст.
...
Рейтинг: 0 / 0
Порядок ID
    #40013250
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за ответы,

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

Код: sql
1.
 SELECT ID+1 FROM Info WHERE ID+1 NOT IN (SELECT Id FROM Info)
...
Рейтинг: 0 / 0
Порядок ID
    #40013256
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS
Всем спасибо за ответы,

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

Код: sql
1.
 SELECT ID+1 FROM Info WHERE ID+1 NOT IN (SELECT Id FROM Info)



1,2,9,10
...
Рейтинг: 0 / 0
Порядок ID
    #40013257
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS
Всем спасибо за ответы,

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

Код: sql
1.
 SELECT ID+1 FROM Info WHERE ID+1 NOT IN (SELECT Id FROM Info)



Так записей ID+2 не видно

Нужно при помощи рекурсивного запроса выстроить последовательность от минимального ID в таблице до максимального.
И проверить на вхождение каждой полученной строки в вашу таблицу.
...
Рейтинг: 0 / 0
Порядок ID
    #40013261
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
;WITH cte_id([id]) AS (
    SELECT 1 AS ID — минимум из таблицы
    UNION ALL
    SELECT [id] + 1
        FROM cte_id WHERE [id] < 10 — Максимум
)
SELECT * FROM cte_id t
    WHERE NOT EXISTS (
        select * from Info i  where I.[Id] = t.[id] 
    ) 
OPTION (MAXRECURSION 0)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок ID
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]