Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок ID / 12 сообщений из 12, страница 1 из 1
29.10.2020, 19:28
    #40013195
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
Всем привет.

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

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

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

такой таблицы к сожалению нет.
...
Рейтинг: 0 / 0
29.10.2020, 19:42
    #40013201
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
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
29.10.2020, 20:08
    #40013212
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
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
29.10.2020, 20:19
    #40013214
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
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
29.10.2020, 20:41
    #40013226
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
Caxa_ASS,

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

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

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

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

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

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

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



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

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

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



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

Нужно при помощи рекурсивного запроса выстроить последовательность от минимального ID в таблице до максимального.
И проверить на вхождение каждой полученной строки в вашу таблицу.
...
Рейтинг: 0 / 0
29.10.2020, 23:09
    #40013261
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок ID
Код: 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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок ID / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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