如何仅使用查询将随机数据插入SQLite表?

Min*_*ang 7 sqlite

我有一个测试SQLite表:

CREATE TABLE test (
  id INTEGER PRIMARY KEY NOT NULL, 
  x REAL NOT NULL  DEFAULT (RANDOM()),
  y REAL NOT NULL  DEFAULT (RANDOM()),
  z REAL NOT NULL  DEFAULT (RANDOM())
)
Run Code Online (Sandbox Code Playgroud)

我想创建超过数千行的随机数据,我怎样才能使用SQL查询?我不能使用SQL FOR循环,因为SQLite不支持循环,我正在考虑SELECT从表中INSERT获取每行的所有数据,因此每次执行查询时行数都会加倍.我认为这需要嵌套查询,我不明白.

Joa*_*son 10

为了hacky,这将一次插入多达2048个随机行,通过设置限制来决定多少行;

INSERT INTO TEST (x,y,z)
  SELECT RANDOM(), RANDOM(), RANDOM()
   FROM (SELECT * FROM (
         (SELECT 0 UNION ALL SELECT 1) t2, 
         (SELECT 0 UNION ALL SELECT 1) t4,
         (SELECT 0 UNION ALL SELECT 1) t8,
         (SELECT 0 UNION ALL SELECT 1) t16,
         (SELECT 0 UNION ALL SELECT 1) t32,
         (SELECT 0 UNION ALL SELECT 1) t64,
         (SELECT 0 UNION ALL SELECT 1) t128,
         (SELECT 0 UNION ALL SELECT 1) t256,
         (SELECT 0 UNION ALL SELECT 1) t512,
         (SELECT 0 UNION ALL SELECT 1) t1024,
         (SELECT 0 UNION ALL SELECT 1) t2048
         )
    ) LIMIT 246;
Run Code Online (Sandbox Code Playgroud)


ste*_*nci 9

您可以使用递归查询.

此查询生成一个包含 1000 个随机数的表:

CREATE TABLE test(field1);

INSERT INTO test
  WITH RECURSIVE
    cte(x) AS (
       SELECT random()
       UNION ALL
       SELECT random()
         FROM cte
        LIMIT 1000
  )
SELECT x FROM cte;
Run Code Online (Sandbox Code Playgroud)