powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / вопрос по SQL или помогите девушке
21 сообщений из 21, страница 1 из 1
вопрос по SQL или помогите девушке
    #32286428
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текст запроса:
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
вопрос по SQL или помогите девушке
    #32286467
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а DRIVER_ID null не бывает? это я пытаюсь предположить почему иногда не возвращает...
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286475
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не возвращает потому, что такой ID уже есть в таблице. Причем чем больше будет записей в таблице, тем чаще этот запрос ничего не будет возвращать.
А Recordset не спасет?
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286481
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или потому, что cast( rand()*10000 as int) не входит в треб. множество
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286495
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DRIVER_ID null не бывает

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

запрос написан правильно?
рекордсет не подходит
крутить цикл пока результат не вернёт не null?
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286536
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретический вопрос.
Функция rand() используется в запросе 4 раза. Связана, имхо, с системными часами. Если запрос выполняется достаточно быстро, то каждый rand() вернет одно и тоже значение... Так ли это?
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286552
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать так
Код: 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
вопрос по SQL или помогите девушке
    #32286553
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что предлагаешь?
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286563
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если абстрагироваться от запросов и рекордсетов и рассмотреть эту задачу так сказать вооруженным взглядом (ща пойду в буфет за булочками и кофе сгоняю..... :-()... ), то у нас есть задача получения через rand не совпадающих чисел в опред. диапазоне. Совершенно естетственно, что при последовательном вызове rand у нас значения новых будут иногда совпадать с уже полученными и чем дальше тем чаще - это все понятно. Так что при таком подходе нет других вариантов: либо сам запрос будет несколько раз вызываться или в нем функция будут сидеть и сама крутить цикл если совпадает, но в конечном итоге, кто-то обязательно будет крутить.

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

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

хотя есть некоторые мысли....
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286566
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может генернуть разок табличку со значениями от 1000 до 9000, а потом просто выбирать из нее значения, которых нет в DRIVERS?
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286569
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этак лучше
Код: 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
вопрос по SQL или помогите девушке
    #32286580
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поигравшись немного с параметрами, пришёл к выводу, что вариант Витал самый разумный
...
Рейтинг: 0 / 0
вопрос по SQL или помогите девушке
    #32286597
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю сложновато это будет только через запрос сделать.
думаю надо какую-нибудь свою функцию накатать, которая будет эту таблицу DRIVER_ID перелапачивать и уже возращать число...

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


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

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

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


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

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

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

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

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


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

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


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