2016-01-24 40 views
1

我有3個表:T1,T2和T3 我試圖將數據插入到T1像這樣:插入隨機值加在一起的所有值

T1.DATA1 = random values from T3.DATA1 
T1.DATA2 = T2.DATA2 
T1.DATA3 = T2.DATA3 

我曾嘗試此查詢:我曾嘗試此查詢:

INSERT INTO T1 (DATA1, DATA2, DATA3) 
SELECT (SELECT DATA1 FROM 
(SELECT DATA1 FROM T3 
ORDER BY dbms_random.value) 
WHERE rownum = 1), DATA2, DATA3 
FROM T2; 

它返回正確的值DATA2DATA3,但在DATA1我在所有行生成一個隨機值。我怎樣才能修改這個查詢在每一行都有隨機值? T2包含大約3000行。

+0

「T2隨機順序的DATA1」是否足夠隨機?還是你需要更多的東西? – Deltharis

+0

你想從'DATA1'列中洗牌數據嗎? – Dmitry

回答

1

此子查詢

SELECT DATA1 
FROM (SELECT DATA1 
     FROM T2 
     ORDER BY dbms_random.value) 
    WHERE rownum = 1 

只返回一個列,如表T2包含行,然後被重複多次。這就是爲什麼我們的查詢不起作用。
按隨機順序插入值(如果我明白你的需要):

INSERT INTO T1 (DATA1, DATA2, DATA3) 
select tt.data1, t.data2, t.data3 
    from (select t2.data2, t2.data3, rownum rn 
     from t2) t, 
     (select data1, row_number() over (order by dbms_random.value) rn 
      from t3, 
       (select rownum from dual connect by level <= 200) m) tt 
where t.rn = tt.rn 

幾點說明:子查詢t返回和data2t2data3列,子查詢tt回報t3.data1柱洗好的值(值由dbms_random.value排序),然後這兩個子查詢合併成一個。子查詢

select rownum from dual connect by level <= 200 

用於乘以行。如果t3表包含15行,則帶有乘子查詢的連接結果會產生3000行,其中t3的每行將重複200次。要乘以另一個值,請將其放入查詢中,而不是200

+0

謝謝@Dmitry,我完全忘記了我有第三張表格,從中我需要這些隨機值。我編輯了我的帖子,你能否也編輯你的答案?我正在查看你的帖子,並試圖找出如何實現它 –

+0

此查詢返回的結果僅在T3的行數。我的T1是空的,T2有3000行,T3有15行。並且此查詢僅返回15行,其中來自T3的隨機值和來自T2的值。 –

+0

@mauekunak你之前沒有提到過。那麼需要做什麼?'T2'和'T3'的值?重複'T3'值200次(產生3000行)或切割'T2'? – Dmitry