Страница 1 из 1
random row
Добавлено: 07 авг 2005, 00:20
michael
В БД есть таблица с колонкой mykey которая является primary key и у неё проставленноо identity=true. Помогите написать как можно вернуть рендомальную row из этой таблицы
Добавлено: 10 авг 2005, 03:00
AiK
Вообще лучше наверное будет не насиловать SQL и получить рандомное число в клиентском приложении. Дальше всё просто select * from my table where mykey = @rand
В MS SQL есть функция RAND. Даёт тебе рандомное число от 0 до 1. Умножаешь его на максимальное значение mykey.
Дальше получаешь целое число (FLOOR, ROUND, CAST, CONVERT по выбору). Ноль меняешь на единицу, т.к. identity на сколько я помню с единицы стартует.
В обоих случаях есть небольшая засада - если из таблицы удалялись строчки, то запрос может вернуть пустой резалтсет, т.к. непрерывность номеров нарушается. В этом случае следует перегенерить рандомное целое число и повторить запрос. Есс-но это опять удобнее сделать на клиенте, т.к. логику повторных запросов на SQL не очень удобно описывать. Хотя, можно немного смухлевать и выбирать ближайшую строчку сверху или с низу. (SET ROWCOUNT 1 и соотвтетственно условия выборки меняешь с равенства на нестрогое неравенство).
Добавлено: 10 авг 2005, 10:15
mm
Oracle:
SELECT * FROM
(SELECT * FROM my_table ORDER BY dbms_random.random)
WHERE rownum<2
Добавлено: 10 авг 2005, 11:55
Yurich
select * from my_table order by RAND() limit 1;