首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite - ORDER BY RAND()

问SQLite - ORDER BY RAND()
EN

Stack Overflow用户
提问于 2009-08-10 07:38:14
回答 4查看 53.3K关注 0票数 77

在MySQL中我可以使用RAND()函数,在SQLite 3中有其他选择吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-10 07:44:37

使用random():

代码语言:javascript
复制
SELECT foo FROM bar
  WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
  LIMIT 1;

EDIT (按QOP):,因为SQLite Autoincremented列上的文档说明:

上面描述的普通ROWID选择算法将生成单调递增的惟一ROWID,只要您从未使用最大ROWID值,并且从未删除表中具有最大ROWID的条目。如果您曾经删除行,则在创建新行时,以前删除的行中的ROWID可能会被重用。

只有在没有INTEGER PRIMARY KEY AUTOINCREMENT列的情况下,上述情况才成立(它仍然适用于INTEGER PRIMARY KEY列)。无论如何,这应该更可移植/更可靠:

代码语言:javascript
复制
SELECT foo FROM bar
  WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;

ROWID、_ROWID_和OID都是SQLite内部行id的别名。

票数 54
EN

Stack Overflow用户

发布于 2009-08-10 07:43:17

代码语言:javascript
复制
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
票数 161
EN

Stack Overflow用户

发布于 2009-08-10 07:42:04

已解决:

代码语言:javascript
复制
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1253561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档