SQLite-RAND()的顺序

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

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

提问于
用户回答回答于

使用随机()

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

上述普通ROWID选择算法将产生单调递增的唯一ROWID。只要您不使用最大ROWID值,也不使用最大ROWID删除表中的条目。如果曾经删除过行,那么在创建新行时,可能会重用以前删除的行中的ROWID。...

只有当没有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内部行id的所有别名。

用户回答回答于

扫码关注云+社区