2013-07-29 22 views
5

Ben bir test SQLite tablo vardır:Sadece sorgular kullanarak bir SQLite tablosuna rastgele veri nasıl eklenir?

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()) 
) 

ve rastgele veri satırı binlerce üzerinde oluşturmak istiyorum ve bunu bir SQL sorgusu kullanarak nasıl yapabilirim? SQL FOR döngüsünü kullanamıyorum çünkü döngüler SQLite'de desteklenmiyor ve tablodaki tüm verileri INSERT her satır için SELECT düşünüyorum ve sorguyu her çalıştırdığımda satır sayısı iki katına çıkar. Bence anlamadığım iç içe geçmiş bir sorgu gerektirir.

+0

sen sql yapmayın: aşağıdaki sorgu OP 1000 rastgele sayılarla istedi tablo oluşturur. Bir istemci uygulamasında yaparsınız (ör. php, perl, python, vb ...). –

+2

Şu anda hacky çözümleri ile ilgileniyorum. –

+0

bu hacky çözümü. –

cevap

8

, bu tek seferde 2.048 rastgele satır kadar ekleyeceğimiz, kaç sınır ayarlayarak karar;

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; 
1

Bu sizin istediğiniz şeyi yapıyor gibi görünüyor. Her defasında mevcut satır sayısını iki katına çıkardığından birkaç kez çalıştırmak zorunda kalacaksınız. Ve başlayacak en az bir satırlık veriye sahip olmanız gerekir. hacky Going for

insert into test select random(), random(), random(), random() from test;

0

Yalnızca RANDOM() ve ABS() işlevlerini% (mod) işlemiyle karıştırın.

Örnek: Bir recursive query kullanabilir 10

INSERT INTO test(field1) VALUES(abs(random() % 11)); 
0

0 ile rasgele sayı ekleyin.

Bu sorgu 1000 rasgele sayılar içeren bir tablo oluşturur:

Ben Stenci katılıyorum
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; 
0

, bir recursive query kullanabilirsiniz. SQLite Release 3.8.3 On 2014-02-03, CTE'lere destek ekledi.

CREATE TABLE test (
    id INTEGER PRIMARY KEY NOT NULL, 
    x REAL NOT NULL, 
    y REAL NOT NULL, 
    z REAL NOT NULL 
); 
INSERT INTO test 
    WITH RECURSIVE 
     cnt(id, x, y, z) AS (
     VALUES(1 , random(), random(), random()) UNION ALL 
     SELECT id+1,random(),random(), random() FROM cnt WHERE ID<1000) 
    select * from cnt; 
İlgili konular