![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск значения, отсутствующего в таблице [D7, Win95/98]
Алхимик © (2004-08-18 15:11:00)Дана таблица (FireBird):
SYSNM INTEGER NOT NULL PK,
DATEREL DATE,
TABNM INTEGER
Задача:
Максимально быстро найти такое число M > заранее заданного N,
которое не равно SYSNM из таблицы.
Варианты окромя перебора есть?
Zacho (2004-08-19 02:13:00) [1]2 Алхимик © :
Завтра я уезжаю на несколько дней, а очень интересно как мои умозрительные построения работают на практике. Так что если не трудно, продублируй реэультаты мне на мыло :)
Алхимик (2004-08-19 01:53:00) [2]
> Покажи полностью запрос
[7] без подчёркнутой строки
> а запрос в [6] - правильный, должен работать независимо
> от данных.
Завтра погоняю, погляжу.
Zacho (2004-08-19 01:50:00) [3]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:38:00) [4]
> [8] Zacho © (19.08.04 01:30)
Дык накидал примерчик. Единицу заменил на моё приснопамятное N из [0].
Находит то что надо. Где у меня ошибка? :)
Zacho (2004-08-19 01:30:00) [5]Обязательно, в нём то всё дело.
Алхимик (2004-08-19 01:29:00) [6][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 00:33:00) [7]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 00:06:00) [8]
> [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-18 23:43:00) [9]2 Алхимик © :
Вот такой вариант поиска дырок :
SELECT MIN(T.SYSNM)+1
FROM MY_TABLE T
JOIN MY_TABLE T2 ON T.SYSNM=T2.SYSNM+1
Находит первую "дырку". Если хочешь последнюю - замени MIN на MAX
Алхимик (2004-08-18 23:09:00) [10]
> [2] Anatoly Podgoretsky © (18.08.04 15:40)
> Вести список дырок.
Угу.
Так и реализовал.
Anatoly Podgoretsky (2004-08-18 15:40:00) [11]Вести список дырок.
stud (2004-08-18 15:33:00) [12]создать генератор и использовать его значение. этого-то значения точно в базе не будет при правильном использовании генератора