【发布时间】:2013-02-24 05:46:29
【问题描述】:
我正在尝试使用主键 _id 和以下查询从表(用户)中检索随机行。
SELECT *
FROM user
WHERE _id IN (SELECT Floor(1 + ( Rand() * ( Count(_id) - 1 ) ))
FROM user);
没有从表中删除任何行,但我(不一致地)返回了多行...
我觉得这很神奇,因为子查询的任何结果都应该返回一个整数,它针对主键.....应该总是只有 1 条记录!
我想使用一个查询,我可能会使其成为一个准备好的语句,并且我没有使用 LIMIT 子句,因为我不能使用@variables 来选择随机行。
我的 MySQL 欢迎声明告诉我我的版本如下: 服务器版本:5.5.29-0ubuntu0.12.04.2 (Ubuntu)
【问题讨论】:
-
您是否有多个相同值的
_id?如果返回行,则执行SELECT _ID1, count(_id1) from user group by _id1 having count(_id1) > 1,那就是你的问题 -
尝试运行这部分查询(从用户处选择 FLOOR(1+(RAND()*(COUNT(_id)-1))) 或尝试将
IN替换为=,如果它给您错误,您可以知道问题出在哪里 -
@MattBusche 即使对于唯一的
_id值,我也设法重现了这一点。请看sqlfiddle.com/#!2/2fda3/7;您将获得 0、1 或 2 个结果。 -
@PawanNogariya 它似乎与
=而不是IN表现相同:sqlfiddle.com/#!2/2fda3/6 -
@PawanNogariya 多试几次 :)
标签: mysql sql random count floor