以随机顺序返回行

是否有可能编写每次运行查询时以随机顺序返回表行的 SQL 查询?

155073 次浏览

这是最简单的解决方案:

SELECT quote FROM quotes ORDER BY RAND()

虽然它不是最有效的。 This one是一个更好的解决方案。

SELECT * FROM table
ORDER BY NEWID()

通常的方法是使用 NEWID ()函数,它会生成一个惟一的 GUID,

SELECT * FROM dbo.Foo ORDER BY NEWID();

为了提高效率和随机性,最好有两个不同的查询。

比如..。

SELECT table _ id FROM 表

Then, in your chosen language, pick a random id, then pull that row's data.

SELECT * FROM table WHERE table _ id = $rand _ id

但是如果您希望表中有很多行,那么这不是一个好主意。如果你对你随机选择的东西设置一些限制会更好。对于出版物来说,可能只从去年发布的内容中随机挑选。

下面是一个例子(来源) :

SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);

SQL Server/MS 访问语法:

SELECT TOP 1 * FROM table_name ORDER BY RAND()

MySQL 语法:

SELECT * FROM table_name ORDER BY RAND() LIMIT 1