Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
4-1091041350
Sulimxar
2004-07-28 23:02
2004.09.12
Окно между курсором и формой


14-1093431344
Неопытный
2004-08-25 14:55
2004.09.12
ктонибуть сталкивался с Python + ReportLib


1-1093035441
ИМХО
2004-08-21 00:57
2004.09.12
The specified module could not be found.


4-1090927960
Sasha73
2004-07-27 15:32
2004.09.12
Как передать данные из одного роцесса в другой ?


14-1093172978
Piter
2004-08-22 15:09
2004.09.12
Что с Дремучими?




   Наверх