MySQL では RAND() 関数を使用できますが、SQLite 3 に代替手段はありますか?
53337 次
4 に答える
161
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
于 2009-08-10T07:43:16.580 に答える
54
random() の使用:
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
編集(QOPによる):SQLite Autoincrement ed列のドキュメントには次のように記載されているため:
上記の通常の 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-10T07:44:37.093 に答える
43
解決済み:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
于 2009-08-10T07:42:03.883 に答える