加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite – ORDER BY RAND()

发布时间:2020-12-12 19:19:41 所属栏目:百科 来源:网络整理
导读:在MySQL中我可以使用RAND()函数,在SQLite 3中有什么替代方法吗? 使用 random(): SELECT foo FROM bar WHERE id = (abs(random()) % (SELECT max(id) FROM bar)) LIMIT 1; 编辑(通过QOP):由于SQLite Autoincremented列上的文档说明: The normal ROWID se
在MySQL中我可以使用RAND()函数,在SQLite 3中有什么替代方法吗? 使用 random():
SELECT foo FROM bar
  WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
  LIMIT 1;

编辑(通过QOP):由于SQLite Autoincremented列上的文档说明:

The normal ROWID selection algorithm described above will generate
monotonically increasing unique ROWIDs
as long as you never use the
maximum ROWID value and you never delete the entry in the table with
the largest ROWID. If you ever delete rows,then ROWIDs from
previously deleted rows might be reused when creating new rows
.

以上只是真的,如果你没有一个INTEGER PRIMARY KEY AUTOINCREMENT列(它仍然可以正常工作与INTEGER PRIMARY KEY列)。无论如何,这应该更加便携/可靠:

SELECT foo FROM bar
  WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;

ROWID,_ROWID_和OID都是SQLite内部行标识的别名。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读