質問: (FLOOR(RAND() * 100) % 2) ``` 式(FLOOR(RAND() * 100) % 2)が0か1になるようにしたつもりなのですが 何回か行った結果は id=0が取得される場合 id=1が取得される場合 2件とも取得できる場合 どちらも取得できない場合 となりました。 この4パターンが出る確率はほぼ同じです。 なぜ2件取得されるのか?、どちらも取得できないのか? そうなる理由が解りません。どうかお教えください。 環境 OS archlinux 4.2.5-1 DB mysqld 10.1.9-MariaDB
回答: MySQLのリファレンスマニュアル(この辺にMySQL/MariaDBで差異はないでしょう)によると: > > WHERE 句内の RAND() は、WHERE が実行されるたびに再評価されます。 > > > とありますね。XCUBEさんの現在の想定だと ``` SELECT * FROM point WHERE 0 = (FLOOR(RAND() * 100) % 2) ``` の出力結果は、「0行」か「2行両方」のいずれかになるのではないでしょうか。 (が、実際にはそうではない、すなわち再評価されている)