我试图用从 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/