Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизЗадачка 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c