无法从MySQL表中选择单个随机行

时间:2014-03-24 23:12:53

标签: mysql sql

我试图从一个非常简单的表中随机选择一个用户来生成样本数据。

该表只有两列,整数主键users_id的所有值均为1到46(含),unamevarchar(60)

查询

select relusers.uname from relusers where relusers.users_id=floor(rand()*46+1);

返回多行。也许我已经盯着这个太久了,但是我没有看到上面的查询如何返回多行。 floor()返回一个与主键列进行比较的整数。在选择中包括users_id会显示选择的多个不同ID。零行因此我可以理解,但多个?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您的代码返回多行,因为每行都会计算rand()。所以,您可以更改多个匹配项。并且根本没有匹配的机会。

您可以使用您的想法,但请尝试这种方式:

select relusers.uname
from relusers cross join
     (selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);

这只生成一个随机值,因此只生成一行。但是,只有46行,order by方法应该表现得足够好:

select relusers.uname
from relusers
order by rand()
limit 1;

答案 1 :(得分:0)

select * from relusers order by rand() limit 1