1000 エントリのテーブルがあるとします。1 から 1000 までの乱数を選択し、その値以上の ID を持つすべての行を返します。静的な値を入力すると、問題なく動作するようです。例えば
Select * From myTable
Where id >= 500
Order by id Limit 10;
これは、500 から 509 までの期待値を返します。しかし、500 の固定値をランダムに生成された値に置き換えようとすると、事態は非常に奇妙になります。
Select * From myTable
Where id >= floor(1 + RAND() * (1000 - 1))
Order by id Limit 10;
突然、連続した値を返さなくなりました。返される値も、ローエンドに向かって極端に偏っています。次のような結果が得られます。
65, 80, 96, 98, 112, 114, 115, 116, 130, 131
なぜこれが起こるのですか?