Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Поиск значения, отсутствующего в таблице   Найти похожие ветки 

 
Алхимик ©   (2004-08-18 15:11) [0]

Дана таблица (FireBird):

SYSNM    INTEGER NOT NULL PK,
DATEREL  DATE,
TABNM    INTEGER

Задача:
Максимально быстро найти такое число M > заранее заданного N,
которое не равно SYSNM из таблицы.

Варианты окромя перебора есть?


 
stud ©   (2004-08-18 15:33) [1]

создать генератор и использовать его значение. этого-то значения точно в базе не будет при правильном использовании генератора


 
Anatoly Podgoretsky ©   (2004-08-18 15:40) [2]

Вести список дырок.


 
Алхимик ©   (2004-08-18 23:09) [3]


> [2] Anatoly Podgoretsky ©   (18.08.04 15:40)
> Вести список дырок.

Угу.
Так и реализовал.


 
Zacho ©   (2004-08-18 23:43) [4]

2 Алхимик © :

Вот такой вариант поиска дырок :

SELECT MIN(T.SYSNM)+1
FROM MY_TABLE T
JOIN MY_TABLE T2 ON T.SYSNM=T2.SYSNM+1


Находит первую "дырку". Если хочешь последнюю - замени MIN на MAX


 
Алхимик ©   (2004-08-19 00:06) [5]


> [4] Zacho ©   (18.08.04 23:43)
> 2 Алхимик © :
>
> Вот такой вариант поиска дырок :
>
> SELECT MIN(T.SYSNM)+1
> FROM MY_TABLE T
> JOIN MY_TABLE T2 ON T.SYSNM=T2.SYSNM+1
>
> Находит первую "дырку". Если хочешь последнюю - замени MIN
> на MAX


Спасибо. Завтра попробую. О результатах доложу. :)


 
Zacho ©   (2004-08-19 00:33) [6]

2 Алхимик © :
Извиняюсь, лажанулся по запарке. На самом деле запрос должен выглядеть так:

SELECT MIN(T.SYSNM)+1 FROM MY_TABLE T
LEFT JOIN MY_TABLE T2
ON T.SYSNM+1=T2.SYSNM
WHERE (T2.SYSNM-T.SYSNM) IS NULL


Если хочешь получить все дырки - убери MIN


 
Алхимик ©   (2004-08-19 01:29) [7]

[6] Zacho ©   (19.08.04 00:33)
SELECT MIN(T.SYSNM)+1 FROM MY_TABLE T
LEFT JOIN MY_TABLE T2
ON T.SYSNM+1=T2.SYSNM
WHERE (T2.SYSNM-T.SYSNM) IS NULL


Условие вроде не обязательно?


 
Zacho ©   (2004-08-19 01:30) [8]

Обязательно, в нём то всё дело.


 
Алхимик ©   (2004-08-19 01:38) [9]


> [8] Zacho ©   (19.08.04 01:30)

Дык накидал примерчик. Единицу заменил на моё приснопамятное N из [0].
Находит то что надо. Где у меня ошибка? :)


 
Zacho ©   (2004-08-19 01:50) [10]

2 Алхимик ©   (19.08.04 1:38)
Покажи полностью запрос. Ибо, как нетрудно заметить :) запрос в Zacho ©   (18.08.04 23:43) [4] и запрос в Zacho ©   (19.08.04 0:33) [6] отличается не только наличием WHERE. В общем, запрос [4] - неправильный, хотя и будет работать в нек-рых случаях, а запрос в   [6] - правильный, должен работать независимо от данных.
Что касается +1 - на что это заменять и сам разберёшся, видно, что не дурак :)


 
Алхимик ©   (2004-08-19 01:53) [11]


> Покажи полностью запрос

[7] без подчёркнутой строки

> а запрос в   [6] - правильный, должен работать независимо
> от данных.

Завтра погоняю, погляжу.


 
Zacho ©   (2004-08-19 02:13) [12]

2 Алхимик © :
Завтра я уезжаю на несколько дней, а очень интересно как мои умозрительные построения работают на практике. Так что если не трудно, продублируй реэультаты мне на мыло :)



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
3-1092632990
Mamed
2004-08-16 09:09
2004.09.12
Bag v AdODB i WebBrowser


1-1093367918
Реактор
2004-08-24 21:18
2004.09.12
Нажатие клавиши Enter


1-1093761619
DIS
2004-08-29 10:40
2004.09.12
функция которая переводит число в слова


1-1093346764
mouse_web
2004-08-24 15:26
2004.09.12
Как поставить QuickReport ?


1-1093786680
Antonmm
2004-08-29 17:38
2004.09.12
Размер файла