我试图用从 0 到行数的随机范围填充列中的每一行。
到目前为止我有这个

UPDATE table
SET column = ABS (RANDOM() % (SELECT COUNT(id) FROM table))

这可以完成工作,但会产生重复的值,结果证明这很糟糕。我添加了一个唯一约束,但这只会导致它崩溃。

有没有办法用特定范围内的随机唯一值更新列?

谢谢!

最佳答案

如果您想稍后以随机顺序读取记录,您可以在当时进行排序:

SELECT * FROM MyTable ORDER BY random()

(如果您在多个查询中需要相同的顺序,这将不起作用。)

否则,您可以使用临时表来存储表的 rowid 与数字 1..N 之间的随机映射。
(这些数字是由临时表的 rowid 自动生成的。)
CREATE TEMP TABLE MyOrder AS
  SELECT rowid AS original_rowid
  FROM MyTable
  ORDER BY random();
UPDATE MyTable
  SET MyColumn = (SELECT rowid
                  FROM MyOrder
                  WHERE original_rowid = MyTable.rowid) - 1;
DROP TABLE MyOrder;

关于SQLite - 使用随机唯一值更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13895716/

10-12 19:58