我已经使用过这行代码很多次了,它从未给我ID(主键)大于50的行。我在测试表中有134行。我的目标是生成范围从0到134.我知道SELECT ROUND( RAND()* 134)LIMIT 1可得出完美结果。就我而言,这不能给我一个完美的结果
SELECT * FROM `test` WHERE `ID` > (SELECT RAND()*134) LIMIT 1;
看来您需要:
SELECT test.*
FROM test
CROSS JOIN (SELECT ROUND(RAND()*134) random) rnd
WHERE test.id = rnd.random;
子查询将在范围内生成一个随机值,并id
选择具有该值的行。
为什么查询无法按需工作?
SELECT * FROM `test` WHERE `ID` > (SELECT RAND()*134) LIMIT 1;
该表有134行。对于每一行,都会生成一个独立的随机数(即,每一行现在都有自己的独立随机值)。然后id
将每一行的值与为此行生成的随机数进行比较。当然id
,匹配的可能性越低,则匹配的可能性就越大。这是第一个逻辑错误。然后LIMIT 1获取所有匹配的行,并从所有匹配的行中返回一个不确定(随机)行。这是查询的第二个逻辑错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句