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

Вниз

Задачка sql   Найти похожие ветки 

 
TSa ©   (2003-03-18 00:04) [0]

Подскажите как можно сделать следующие на MySQL или хотябы IB:
Вот есть БД с именем bd1 в ней одно числовое поле в этом поле записаны числа по порядку например от 5 до 100 или от 1 до 10 неважно нужно изнать, мы удалем из этой таблицы одну запись нужно узнать какое число пропало т.е. удалили мы в промежутке от 1..10 число 4 нужно узать что его нет !!!
Я думаю сделать так одним запросом создать новую таблицу (временно) и по порядку прономировать все записи во вотором поле и потом проверить что не совпадпет то что не совпадает и будет наше значение правельно лия мыслю или это можно по рациональнее сделать ?


 
ЮЮ ©   (2003-03-18 04:50) [1]

>число 4 нужно узать что его нет
Select * from table where ID = 4 - и узнаешь есть 4 или нет :-)

SELECT L.ID
FROM Table L LEFT JOIN Table R ON L.ID + 1 = R.ID
WHERE R.ID IS NULL
вернёт все записи, для которых не нашлось следующей записи с ID равным ID + 1


 
Johnmen ©   (2003-03-18 09:39) [2]

Есть еще универсальный запрос для выборки всех "дырок".


 
TSa ©   (2003-03-18 22:23) [3]

Johnmen какой ?


 
TSa ©   (2003-03-18 23:15) [4]

ЮЮ в том то и прикол что надо найти первую которая не по порядку, а какая она будет не известно


 
MsGuns ©   (2003-03-18 23:36) [5]

>TSa © (18.03.03 22:23)
>Johnmen какой ?

Очень хитрый. Ставишь на таблицу экскюзив, закачиваешь в НД все
ее записи и в цикле While Not Eof сравниваешь значение поля на предмет "преимущества" его перед предыдущим ровно на 1.
Если нет, то "дырка". Если нужна только первая, то выход с передачей полученного значения. Сделай это как ХП (в эклюзив можешь не переводить, просто выставь транзакции, из которой будешь запускать ХП, соотв. изоляцию) и работать будет на несколько порядков быстрее, чем по методу запроса с JOIN.



 
Johnmen ©   (2003-03-19 10:06) [6]

Приведенное решение придумано не мной(а кем, забыл, но кем-то из известных, типа автора FIB"ов) :
SELECT T.ID+1, MIN(T1.ID)-1, MIN(T1.ID)-T.ID-1
FROM TABLE1 T
JOIN TABLE1 T1 ON T.ID<T1.ID
WHERE T.ID<=1000 AND T1.ID<=1000
GROUP BY T.ID
HAVING MIN(T1.ID)-T.ID>1

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



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
3-19422
lats
2003-03-18 10:59
2003.04.07
Помогите составить SQL запрос


1-19522
kat
2003-03-26 11:09
2003.04.07
Отчет в QuickRep в ширину на 2-х страницах


3-19470
Unone
2003-03-19 07:41
2003.04.07
Фильтрация данных


1-19588
ksushishka
2003-03-28 16:29
2003.04.07
Вывод строки


1-19619
Opera
2003-03-25 12:33
2003.04.07
Прилипание