我试图从一个非常简单的表中随机选择一个用户来生成样本数据。
该表只有两列,整数主键users_id
的所有值均为1到46(含),uname
为varchar(60)
。
查询
select relusers.uname from relusers where relusers.users_id=floor(rand()*46+1);
返回多行。也许我已经盯着这个太久了,但是我没有看到上面的查询如何返回多行。 floor()返回一个与主键列进行比较的整数。在选择中包括users_id会显示选择的多个不同ID。零行因此我可以理解,但多个?有什么想法吗?
答案 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