Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизПоиск значения, отсутствующего в таблице Найти похожие ветки
← →
Алхимик © (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c