Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / вопрос по SQL или помогите девушке / 21 сообщений из 21, страница 1 из 1
07.10.2003, 15:21
    #32286428
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
текст запроса:
SELECT cast( rand()*10000 as int) AS Driver_ID
where ( cast( rand()*10000 as int) Not In
( SELECT DRIVER_ID
FROM DRIVERS)
аnd (cast( rand()*10000 as int)) > 1000 AND cast( rand()*10000 as int) < 9000)


мне нужно получить рандомальное число >1000 and <9000
не содержащаяся в поле Driver_ID таблички DRIVERS

запрос вроде написан правильно, но есть один нюанс
иногда ничего не возвращает

как быть? считывать результат в переменную и проверять в цикле вернул/не вернул запрос что-то
или можно написать 1 запрос?
...
Рейтинг: 0 / 0
07.10.2003, 15:35
    #32286467
Артист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
а DRIVER_ID null не бывает? это я пытаюсь предположить почему иногда не возвращает...
...
Рейтинг: 0 / 0
07.10.2003, 15:37
    #32286475
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Не возвращает потому, что такой ID уже есть в таблице. Причем чем больше будет записей в таблице, тем чаще этот запрос ничего не будет возвращать.
А Recordset не спасет?
...
Рейтинг: 0 / 0
07.10.2003, 15:39
    #32286481
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Или потому, что cast( rand()*10000 as int) не входит в треб. множество
...
Рейтинг: 0 / 0
07.10.2003, 15:44
    #32286495
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
DRIVER_ID null не бывает

я так подозреваю что запрос ничего не возвращает в том случае
если то что rand()*10000 вернула не подходит в where
...
Рейтинг: 0 / 0
07.10.2003, 15:50
    #32286513
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Причем ИМХО в первом Where
...
Рейтинг: 0 / 0
07.10.2003, 15:51
    #32286516
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
так что скажет стая, в смысле уважаемые коллеги?

запрос написан правильно?
рекордсет не подходит
крутить цикл пока результат не вернёт не null?
...
Рейтинг: 0 / 0
07.10.2003, 16:05
    #32286536
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Теоретический вопрос.
Функция rand() используется в запросе 4 раза. Связана, имхо, с системными часами. Если запрос выполняется достаточно быстро, то каждый rand() вернет одно и тоже значение... Так ли это?
...
Рейтинг: 0 / 0
07.10.2003, 16:14
    #32286552
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Можно попробовать так
Код: plaintext
1.
2.
3.
4.
SELECT top  1  rnd
from (select cast(rand(DRIVER_ID)* 8000  as int)+ 1000   as rnd
FROM DRIVERS) a left outer join DRIVERS d on d.DRIVER_ID = a.rnd
where d.DRIVER_ID is null

Это скорее всего не решение, но по крайней мере новое направление мысли..
...
Рейтинг: 0 / 0
07.10.2003, 16:14
    #32286553
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
а что предлагаешь?
...
Рейтинг: 0 / 0
07.10.2003, 16:18
    #32286563
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Если абстрагироваться от запросов и рекордсетов и рассмотреть эту задачу так сказать вооруженным взглядом (ща пойду в буфет за булочками и кофе сгоняю..... :-()... ), то у нас есть задача получения через rand не совпадающих чисел в опред. диапазоне. Совершенно естетственно, что при последовательном вызове rand у нас значения новых будут иногда совпадать с уже полученными и чем дальше тем чаще - это все понятно. Так что при таком подходе нет других вариантов: либо сам запрос будет несколько раз вызываться или в нем функция будут сидеть и сама крутить цикл если совпадает, но в конечном итоге, кто-то обязательно будет крутить.

Тут такой вопрос, а какие вообще правила игры, что получить надо???

Если тебе надо например получить 100 случ. чисел в диапазоне от 200 до 300, то это проще делается по принципу "мешания" колоды карт
А вот если только 80 случ. чисел в диапазоне от 200 до 300, тогда конечно все посложнее будет...

хотя есть некоторые мысли....
...
Рейтинг: 0 / 0
07.10.2003, 16:20
    #32286566
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Может генернуть разок табличку со значениями от 1000 до 9000, а потом просто выбирать из нее значения, которых нет в DRIVERS?
...
Рейтинг: 0 / 0
07.10.2003, 16:21
    #32286569
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Вот этак лучше
Код: plaintext
1.
2.
3.
4.
SELECT top  1  rnd
from (select cast(rand(DRIVER_ID*DATEPART(ms, getdate()))* 8000  as int)+ 1000   as rnd
FROM DRIVERS) a left outer join DRIVERS d on d.DRIVER_ID = a.rnd
where d.DRIVER_ID is null

Единственная проблема - если в таблице не будет ни одной записи, то и числа не будет
...
Рейтинг: 0 / 0
07.10.2003, 16:27
    #32286580
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Поигравшись немного с параметрами, пришёл к выводу, что вариант Витал самый разумный
...
Рейтинг: 0 / 0
07.10.2003, 16:35
    #32286597
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Думаю сложновато это будет только через запрос сделать.
думаю надо какую-нибудь свою функцию накатать, которая будет эту таблицу DRIVER_ID перелапачивать и уже возращать число...

блин, ща, тут еще одна мысль появилась, пойду подумаю пока
...
Рейтинг: 0 / 0
07.10.2003, 16:38
    #32286609
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
мне нужно получить рандомальное число >1000 and <9000
не содержащееся в поле Driver_ID таблички DRIVERS


генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к
табличка DRIVERS динамическая
полученное значение я потом пишу в эту самую табличку DRIVERS

простой запрос я и так состряпала, чуствовала что можно без цикла обойтись
но как не знала

пожалуй вариант Павла самый подходящий
2Единственная проблема - если в таблице не будет ни одной записи, то и числа не будет


таблица не пустая

всем большое спасибо
если есть ещё какие-то варианты
предлагайте
...
Рейтинг: 0 / 0
07.10.2003, 16:40
    #32286612
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
> генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к табличка DRIVERS динамическая

Ну и что? Пишется запрос, который возвращает из таблицы А те значения, которых нет в таблице Б...
...
Рейтинг: 0 / 0
07.10.2003, 16:47
    #32286629
Пупкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
Можно сгенерить темповую табличку от 1 до 8000-N записей. Первое поле -заполнить счетчиком. Второе - ("не ID-ями") (в произвольном порядке). рендомом брать счетчик. (на 1х8000-N). Возвращать "не-ID".

//Или, что то же самое - заполняем 1000-9000, выкалываем ID, пронумеровываем (второе поле) - например вставкой полученных значений в (темповую) таблицу со счетчиком...//
...
Рейтинг: 0 / 0
07.10.2003, 16:57
    #32286647
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к
табличка DRIVERS динамическая
полученное значение я потом пишу в эту самую табличку DRIVERS

это я погорячилась
это подходит


но в варианте Павла не надо генерировать таблицу
...
Рейтинг: 0 / 0
07.10.2003, 20:47
    #32286908
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
В.С
Пишется запрос, который возвращает из таблицы А те значения, которых нет в таблице Б...

если так сделать
то выдёргиваются значения не рандомально а по порядку
...
Рейтинг: 0 / 0
07.10.2003, 20:56
    #32286910
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по SQL или помогите девушке
А дальше из нее можно выдергивать. Совершенно не обязательно брать First.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / вопрос по SQL или помогите девушке / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]