为什么 SQL LIMIT 子句为每个查询返回随机行?



这是一个非常简单的查询。对于每个查询,我都会得到不同的结果。当我使用TOP 1时也会发生类似的事情。我想要一个随机的子样本,它可以工作。但是我错过了什么吗?为什么它每次都返回不同的值?

SELECT DISTINCT user_id FROM table1 
where day_id>="2009-01-09" and day_id<"2011-02-16"
LIMIT 1;

不能保证您的查询会得到随机结果。您很可能每次都会得到相同的结果(尽管返回的实际结果是不确定的(。为了保证你得到一个随机的、唯一的user_id,你应该从DISTINCT值列表中SELECT一个随机值:

SELECT user_id
FROM (SELECT DISTINCT user_id 
FROM table1 
WHERE day_id >= "2009-01-09" AND day_id < "2011-02-16"
) u
ORDER BY RAND()
LIMIT 1

SQL 语句表示无序集合,添加order by子句,例如

...
ORDER BY user_id
LIMIT 1

最新更新