日期:2014-05-16  浏览次数:20860 次

这句简单的查询怎么回事?求解释
我有个student表,id为1~1000,我想随机找出其中的一条记录,用下面的sql
select * from student where id=(select floor(1+rand()*1000));
结果有时候显示为0条,有时候居然能返回两条数据,咋回事阿?不是限定了id等于一个数字吗?怎么还能返回两条记录了?
我又试过select * from student where id>=(select floor(1+rand()*1000)) order by id limit 1;基本上只返回id为100以内的一条记录,上百的压根就看不到,请问怎么写才能比较均匀的返回1~1000之间的记录呢?

------解决方案--------------------
SELECT * FROM student
WHERE id>=RAND()*1000
ORDER BY id
LIMIT 1;
------解决方案--------------------
SELECT * FROM student, (select RAND()*1000 as k) b where student.id >k order by student.id limit 1