在MySQL中我可以使用RAND()函数,在SQLite 3中有其他选择吗?
发布于 2009-08-10 07:44:37
使用random():
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列)。无论如何,这应该更可移植/更可靠:
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;ROWID、_ROWID_和OID都是SQLite内部行id的别名。
发布于 2009-08-10 07:43:17
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;发布于 2009-08-10 07:42:04
已解决:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;https://stackoverflow.com/questions/1253561
复制相似问题